Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

currentOp

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 访问控制
  • 示例
  • 输出示例
  • 特定输出示例
  • 输出字段
currentOp

自版本 6.2 起已弃用

在 6.2 版本及更高版本中,使用 $currentOp 聚合阶段。

返回一个文档,其中包含有关 mongod 实例正在进行的操作的信息。

使用 $currentOp 聚合阶段,而不是 currentOp 命令及其 mongosh 助手方法 db.currentOp()

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

注意

所有MongoDB Atlas集群都支持此命令。有关Atlas支持所有命令的信息,请参阅不支持的命令。

该命令具有以下语法:

db.adminCommand(
{
currentOp: 1
}
)

注意

从 MongoDB 5.0 开始,在运行带有 mongosh 的辅助方法 db.currentOp() 时使用 $currentOp 聚合阶段。

鉴于此,在 5.0 版本的 Shell 以及使用 mongosh 时,db.currentOp() 结果集不受针对先前 mongo 旧版本文档的 16 MB BSON 文档返回大小限制的约束。

currentOp 必须针对 admin 数据库运行,并且可以接受多个可选字段。

字段
说明
"$ownOps"

布尔值。如果设为 true,则只返回有关当前用户的操作的信息。

mongod 实例上,用户始终有权在 "$ownOps": true 的情况下运行 currentOp。参见访问控制。

"$all"

布尔值。如果设置为 true,则返回所有操作的信息,包括对空闲连接的操作和系统操作。

"$all": true 覆盖任何输出字段过滤器。

<filter>
指定输出字段的过滤条件。请参阅示例。
comment

可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:

注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。

currentOp 数据库分析器会为 CRUD 操作报告相同的基本诊断信息,包括以下内容:

这些操作也包含在慢查询的日志中。有关慢查询日志的更多信息,请参阅 slowOpThresholdMs

使用可查询加密时,带有 encryptionInformation 选项的 currentOp 操作会编辑某些信息:

  • 输出将忽略 "command" 之后的所有字段。

  • 输出编辑 "command" 以仅包含第一个元素 $comment 以及 $db

在使用 authorization 运行的系统上,用户必须具有包含 inprog 特权动作的访问权限。

没有 inprog 特权动作,用户也可以在 mongod 实例上使用 $ownOps,来查看自己的操作。

db.adminCommand( { currentOp: 1, "$ownOps": 1 } )

提示

另请参阅:

以下示例使用 currentOp 命令和各种查询文档来过滤输出结果。

db.adminCommand(
{
currentOp: true,
"$all": true
}
)

以下示例返回有关等待锁的所有写操作的信息:

db.adminCommand(
{
currentOp: true,
"waitingForLock" : true,
$or: [
{ "op" : { "$in" : [ "insert", "update", "remove" ] } },
{ "command.findandmodify": { $exists: true } }
]
}
)

以下示例将返回有关从未出现的所有正在运行的活动操作的信息:

db.adminCommand(
{
currentOp: true,
"active" : true,
"numYields" : 0,
"waitingForLock" : false
}
)

以下示例将返回有关运行时间超过 3 秒且针对数据库 db1 的所有活动操作的信息:

db.adminCommand(
{
currentOp: true,
"active" : true,
"secs_running" : { "$gt" : 3 },
"ns" : /^db1\./
}
)

以下示例返回索引创建操作的相关信息:

db.adminCommand(
{
currentOp: true,
$or: [
{ op: "command", "command.createIndexes": { $exists: true } },
{ op: "none", "msg" : /^Index Build/ }
]
}
)

以下是在独立实例上运行时 currentOp 输出的原型:

{
"inprog": [
{
"type" : <string>,
"host" : <string>,
"desc" : <string>,
"connectionId" : <number>,
"client" : <string>,
"appName" : <string>,
"clientMetadata" : <document>,
"active" : <boolean>,
"currentOpTime" : <string>,
"effectiveUsers" : [
{
"user" : <string>,
"db" : <string>
}
],
"opid" : <number>,
"lsid" : {
"id" : <UUID>,
"uid" : <BinData>
},
"secs_running" : <NumberLong()>,
"microsecs_running" : <number>,
"op" : <string>,
"ns" : <string>,
"command" : <document>,
"queryFramework" : <string>,
"planSummary": <string>,
"cursor" : { // only for getMore operations
"cursorId" : <NumberLong()>,
"createdDate" : <ISODate()>,
"lastAccessDate" : <ISODate()>,
"nDocsReturned" : <NumberLong()>,
"nBatchesReturned" : <NumberLong()>,
"noCursorTimeout" : <boolean>,
"tailable" : <boolean>,
"awaitData" : <boolean>,
"originatingCommand" : <document>,
"planSummary" : <string>,
"operationUsingCursorId" : <NumberLong()>
},
"msg": <string>,
"progress" : {
"done" : <number>,
"total" : <number>
},
"killPending" : <boolean>,
"numYields" : <number>,
"dataThroughputLastSecond" : <number>,
"dataThroughputAverage" : <number>,
"locks" : {
"ParallelBatchWriterMode" : <string>,
"ReplicationStateTransition" : <string>,
"Global" : <string>,
"Database" : <string>,
"Collection" : <string>,
"Metadata" : <string>,
"oplog" : <string>
},
"waitingForLock" : <boolean>,
"lockStats" : {
"ParallelBatchWriterMode" : {
"acquireCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"acquireWaitCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
},
"deadlockCount" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
}
},
"ReplicationStateTransition" : {
...
},
"Global": {
...
},
"Database" : {
...
},
...
}
},
...
],
"fsyncLock": <boolean>,
"info": <string>,
"ok": <num>
}

以下是在副本集的主节点 (primary node in the replica set)节点上运行时currentOp输出的原型:

{
"inprog": [
{
"type" : <string>,
"host" : <string>,
"desc" : <string>,
"connectionId" : <number>,
"client" : <string>,
"appName" : <string>,
"clientMetadata" : <document>,
"lsid" : {
"id" : <UUID>,
"uid" : <BinData>
},
"transaction" : {
"parameters" : {
"txnNumber" : <NumberLong()>,
"autocommit" : <boolean>,
"readConcern" : {
"level" : <string>
}
},
"readTimestamp" : <Timestamp>,
"startWallClockTime" : <string>,
"timeOpenMicros" : <NumberLong()>,
"timeActiveMicros" : <NumberLong()>,
"timeInactiveMicros" : <NumberLong()>,
"expiryTime" : <string>,
},
"active" : <boolean>,
"currentOpTime" : <string>,
"effectiveUsers" : [
{
"user" : <string>,
"db" : <string>
}
],
"opid" : <number>,
"secs_running" : <NumberLong()>,
"microsecs_running" : <number>,
"op" : <string>,
"ns" : <string>,
"command" : <document>,
"originatingCommand" : <document>,
"queryFramework" : <string>,
"planSummary": <string>,
"prepareReadConflicts" : <NumberLong()>,
"writeConflicts" : <NumberLong()>,
"cursor" : { // only for getMore operations
"cursorId" : <NumberLong()>,
"createdDate" : <ISODate()>,
"lastAccessDate" : <ISODate()>,
"nDocsReturned" : <NumberLong()>,
"nBatchesReturned" : <NumberLong()>,
"noCursorTimeout" : <boolean>,
"tailable" : <boolean>,
"awaitData" : <boolean>,
"originatingCommand" : <document>,
"planSummary" : <string>,
"operationUsingCursorId" : <NumberLong()>
},
"msg": <string>,
"progress" : {
"done" : <number>,
"total" : <number>
},
"killPending" : <boolean>,
"numYields" : <number>,
"dataThroughputLastSecond" : <number>,
"dataThroughputAverage" : <number>,
"locks" : {
"ParallelBatchWriterMode" : <string>,
"ReplicationStateTransition" : <string>,
"Global" : <string>,
"Database" : <string>,
"Collection" : <string>,
"Metadata" : <string>,
"oplog" : <string>
},
"waitingForLock" : <boolean>,
"lockStats" : {
"ParallelBatchWriterMode" : {
"acquireCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"acquireWaitCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
},
"deadlockCount" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
}
},
"ReplicationStateTransition" : {
...
},
"Global" : {
...
},
"Database" : {
...
},
...
}
},
...
],
"fsyncLock": <boolean>,
"info": <string>,
"ok": <num>,
"operationTime": <timestamp>,
"$clusterTime": <document>
}

以下是在分分片集群的 上运行时的currentOp mongos输出示例(字段可能因所报告的操作而异):

{
"inprog": [
{
"shard": <string>,
"type" : <string>,
"host" : <string>,
"desc" : <string>,
"connectionId" : <number>,
"client_s" : <string>,
"appName" : <string>,
"clientMetadata" : <document>,
"lsid" : {
"id" : <UUID>,
"uid" : <BinData>
},
"transaction" : {
"parameters" : {
"txnNumber" : <NumberLong()>,
"autocommit" : <boolean>,
"readConcern" : {
"level" : <string>
}
},
"readTimestamp" : <Timestamp>,
"startWallClockTime" : <string>,
"timeOpenMicros" : <NumberLong()>,
"timeActiveMicros" : <NumberLong()>,
"timeInactiveMicros" : <NumberLong()>,
"expiryTime" : <string>,
},
"active" : <boolean>,
"currentOpTime" : <string>,
"effectiveUsers" : [
{
"user" : <string>,
"db" : <string>
}
],
"runBy" : [
{
"user" : <string>,
"db" : <string>
}
],
"twoPhaseCommitCoordinator" : {
"lsid" : {
"id" : <UUID>,
"uid" : <BinData>
},
"txnNumber" : <NumberLong>,
"numParticipants" : <NumberLong>,
"state" : <string>,
"commitStartTime" : <ISODate>,
"hasRecoveredFromFailover" : <boolean>,
"stepDurations" : <document>,
"decision" : <document>,
"deadline" : <ISODate>
}
"opid" : <string>,
"secs_running" : <NumberLong()>,
"microsecs_running" : <number>,
"op" : <string>,
"ns" : <string>,
"command" : <document>,
"configTime" : <Timestamp>, // Starting in 5.0
"topologyTime" : <Timestamp>, // Starting in 5.0
"queryFramework" : <string>, // Starting in 6.2
"planSummary": <string>,
"prepareReadConflicts" : <NumberLong()>,
"writeConflicts" : <NumberLong()>,
"cursor" : { // only for getMore operations
"cursorId" : <NumberLong()>,
"createdDate" : <ISODate()>,
"lastAccessDate" : <ISODate()>,
"nDocsReturned" : <NumberLong()>,
"nBatchesReturned" : <NumberLong()>,
"noCursorTimeout" : <boolean>,
"tailable" : <boolean>,
"awaitData" : <boolean>,
"originatingCommand" : <document>,
"planSummary" : <string>,
"operationUsingCursorId" : <NumberLong()>
},
"msg": <string>,
"progress" : {
"done" : <number>,
"total" : <number>
},
"killPending" : <boolean>,
"numYields" : <number>,
"dataThroughputLastSecond" : <number>,
"dataThroughputAverage" : <number>,
"locks" : {
"ParallelBatchWriterMode" : <string>,
"ReplicationStateTransition" : <string>,
"Global" : <string>,
"Database" : <string>,
"Collection" : <string>,
"Metadata" : <string>,
"DDLDatabase" : <string>,
"DDLCollection" : <string>,
"oplog" : <string>
},
"waitingForLock" : <boolean>,
"lockStats" : {
"ParallelBatchWriterMode": {
"acquireCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"acquireWaitCount": {
"r": <NumberLong>,
"w": <NumberLong>,
"R": <NumberLong>,
"W": <NumberLong>
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
},
"deadlockCount" : {
"r" : NumberLong(0),
"w" : NumberLong(0),
"R" : NumberLong(0),
"W" : NumberLong(0)
}
},
"ReplicationStateTransition" : {
...
},
"Global" : {
...
},
"Database" : {
...
},
...
}
},
...
],
"ok": <num>,
"operationTime": <timestamp>,
"$clusterTime": <document>
}

这些输出示例说明了特定操作的 currentOp 输出。构成实际输出的字段因服务器角色而异。

{
type: "op",
desc: "Resharding{Donor, Recipient, Coordinator}Service <reshardingUUID>",
op: "command",
ns: "<database>.<collection>",
originatingCommand: {
reshardCollection: "<database>.<collection>",
key: <shardkey>,
unique: <boolean>,
collation: {locale: "simple"},
// Other options to the reshardCollection command are omitted
// to decrease the likelihood the output is truncated.
},
{donor, coordinator, recipient}State : "<service state>",
approxDocumentsToCopy: NumberLong(<count>),
approxBytesToCopy: NumberLong(<count>),
bytesCopied: NumberLong(<count>),
countWritesToStashCollections: NumberLong(<count>),
countWritesDuringCriticalSection : NumberLong(<count>),
countReadsDuringCriticalSection: NumberLong(<count>),
deletesApplied: NumberLong(<count>),
documentsCopied: NumberLong(<count>),
insertsApplied: NumberLong(<count>),
oplogEntriesFetched: NumberLong(<count>),
oplogEntriesApplied: NumberLong(<count>),
remainingOperationTimeEstimatedSecs: NumberLong(<count>),
allShardsLowestRemainingOperationTimeEstimatedSecs: NumberLong(<estimate>),
allShardsHighestRemainingOperationTimeEstimatedSecs: NumberLong(<estimate>),
totalApplyTimeElapsedSecs: NumberLong(<count>),
totalCopyTimeElapsedSecs: NumberLong(<count>),
totalCriticalSectionTimeElapsedSecs : NumberLong(<count>),
totalOperationTimeElapsedSecs: NumberLong(<count>),
updatesApplied: NumberLong(<count>),
}
{
type: "op",
desc: "GlobalIndex{Donor, Recipient, Coordinator}Service <globalIndexUUID}",
op: "command",
ns: "<database>.<collection>",
originatingCommand: {
createIndexes: "<database>.<collection>",
key: <indexkeypattern>,
unique: <boolean>,
<Additional createIndexes options>
},
{donor, coordinator, recipient}State : "<service state>",
approxDocumentsToScan: NumberLong(<count>),
approxBytesToScan: NumberLong(<count>),
bytesWrittenFromScan: NumberLong(<count>),
countWritesToStashCollections: NumberLong(<count>),
countWritesDuringCriticalSection : NumberLong(<count>),
countReadsDuringCriticalSection: NumberLong(<count>),
keysWrittenFromScan: NumberLong(<count>),
remainingOperationTimeEstimatedSecs: NumberLong(<count>),
allShardsLowestRemainingOperationTimeEstimatedSecs: NumberLong(<estimate>),
allShardsHighestRemainingOperationTimeEstimatedSecs: NumberLong(<estimate>),
totalCopyTimeElapsedSecs: NumberLong(<count>),
totalCriticalSectionTimeElapsedSecs : NumberLong(<count>),
totalOperationTimeElapsedSecs: NumberLong(<count>),
}
currentOp.type

操作类型。值为:

  • op

  • idleSession

  • idleCursor

如果 currentOp.typeopcurrentOp.op 将提供有关特定操作的详细信息。

currentOp.host

运行操作的主机的名称。

currentOp.desc

对客户的描述。该字符串包括 connectionId

currentOp.connectionId

操作发起的连接的标识符。

currentOp.client

包含操作来源信息的字符串。

对于多文档事务,client 会存储有关在事务内运行操作的最新客户端的信息。

currentOp.appName

运行操作的客户端应用程序的标识符。使用 appName 连接字符串选项设置 appName 字段的自定义值。

currentOp.clientMetadata

有关客户端的其他信息。

对于多文档事务,client 会存储有关在事务内运行操作的最新客户端的信息。

currentOp.currentOpTime

操作的开始时间。

currentOp.currentQueue

8.0版本新增

操作的当前队列

currentOp.currentQueue.name

操作的当前队列的名称。

注意

如果currentQueue存在且nameingress ,则该操作正在等待入口准入。

currentOp.currentQueue.totalTimeQueuedMicros

该操作在相应队列中花费的累计总时间(以微秒为单位)。

currentOp.queues

有关当前操作的ingressexecution队列的信息。

currentOp.effectiveUsers

包含与操作关联的每个用户的文档的数组。每个用户文档都包含 user 名称和身份验证 db

提示

另请参阅:

currentOp.runBy

数组,其中包含正在模拟 effectiveUser(s) 进行操作的每个用户的文档。runBy 文档包含 user 名称和身份验证 db。一般来说,runBy 用户是 __system 用户;例如

"runBy" : [
{
"user" : "__system",
"db" : "local"
}
]

仅在分片集群上可用

currentOp.lsid

会话标识符。

仅当操作与会话关联时才存在。

currentOp.transaction

一份文档,包含多文档事务信息。

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.parameters

一份文档,包含多文档事务的信息。

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.parameters.txnNumber

事务编号。

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.parameters.autocommit

布尔标志,表明事务是否开启了自动提交。

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.parameters.readConcern

事务的读关注

多文档事务支持读关注 "snapshot""local""majority"

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.readTimestamp

此事务中的操作正在读取的快照时间戳。

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.startWallClockTime

事务开始的日期和时间(带时区)。

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.timeOpenMicros

事务的持续时间(以微秒计)。

添加至 timeInactiveMicrostimeActiveMicros 值应该等于 timeOpenMicros

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.timeActiveMicros

事务处于活动状态的总时长;即事务运行各种操作的总时长。

添加至 timeInactiveMicrostimeActiveMicros 值应该等于 timeOpenMicros

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.timeInactiveMicros

事务处于非活动状态的总时长;即事务没有运行任何操作的总时长。

添加至 timeActiveMicrostimeInactiveMicros 值应该等于 timeOpenMicros

只有当操作是多文档事务的一部分时才会出现。

currentOp.transaction.expiryTime

事务超时并中止的日期和时间(带时区)。

currentOp.transaction.expiryTime 等于 currentOp.transaction.startWallClockTime + transactionLifetimeLimitSeconds

有关更多信息,请参阅事务的运行时间限制

只有当操作是多文档事务的一部分时才会出现。

currentOp.twoPhaseCommitCoordinator

有关以下任一信息:

  • 用于跨多个分片写入操作的事务的提交协调指标。

    提交协调由分片处理,currentOp(在 mongos 或分片节点上运行)仅针对当前由该分片协调的事务返回分片的协调信息。

    要仅过滤提交协调指标:

    db.currentOp( { desc: "transaction coordinator" })
  • 特定的提交协调操作(即currentOp.typeopcurrentOp.desc"TransactionCoordinator" )由事务协调器生成。

currentOp.twoPhaseCommitCoordinator.lsid

多分片事务的会话标识符。

lsidtxnNumber 的组合可标识事务。

可用于提交协调指标和特定协调操作。

currentOp.twoPhaseCommitCoordinator.txnNumber

多分片事务的交易编号。

txnNumberlsid 的组合可标识事务。

可用于提交协调指标和特定协调操作。

currentOp.twoPhaseCommitCoordinator.action

事务协调器生成的特定提交协调操作:

  • "sendingPrepare"

  • "sendingCommit"

  • "sendingAbort"

  • "writingParticipantList"

  • "writingDecision"

  • "deletingCoordinatorDoc"

仅适用于特定的协调操作。

currentOp.twoPhaseCommitCoordinator.startTime

action 的开始日期和时间。

仅适用于特定的协调操作。

currentOp.twoPhaseCommitCoordinator.numParticipants

参与本次提交的分片数量。

仅适用于提交协调指标

currentOp.twoPhaseCommitCoordinator.state

提交协调过程的当前步骤/状态。

步骤/阶段
说明
inactive
不是提交的主动部分。
writingParticipantList
写入属于该多分片事务的分片列表的本地记录。
waitingForVotes
等待参与者通过投票作出提交或终止响应。
writingDecision
写入协调器根据投票作出提交或终止决定的本地记录。
waitingForDecisionAck
等待参与者确认协调器提交或中止的决定。
deletingCoordinatorDoc
删除提交决策的本地记录。

仅适用于提交协调指标

另请参阅 currentOp.twoPhaseCommitCoordinator.stepDurations

currentOp.twoPhaseCommitCoordinator.commitStartTime

提交操作的开始日期和时间。

仅适用于提交协调指标

currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailover

一个布尔值,指示提交协调是否由于协调提交的分片故障转移而重新启动。

如果 hasRecoveredFromFailover 为 true,那么 currentOp.twoPhaseCommitCoordinator.stepDurations 中指定的时间可能不会准确适用于所有步骤。

仅适用于提交协调指标

currentOp.twoPhaseCommitCoordinator.stepDurations

包含已完成或正在进行的提交协调 steps/state 的持续时间(以微秒计)的文档:

"stepDurations" : {
"writingParticipantListMicros" : NumberLong(17801),
"totalCommitDurationMicros" : NumberLong(42488463),
"waitingForVotesMicros" : NumberLong(30378502),
"writingDecisionMicros" : NumberLong(15015),
"waitingForDecisionAcksMicros" : NumberLong(12077145),
"deletingCoordinatorDocMicros" : NumberLong(6009)
},

如果 currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailover 为 true,那么 stepDurations 中指定的时间可能不会准确适用于所有步骤。

对于处于 inactive 状态的协调器来说,文档为空:

"stepDurations" : {
}

仅适用于提交协调指标

请参阅 currentOp.twoPhaseCommitCoordinator.state

currentOp.twoPhaseCommitCoordinator.decision

包含提交/中止决策的文档,例如:

  • 对于提交决策:

    "decision" : {
    "decision" : "commit",
    "commitTimestamp" : Timestamp(1572034669, 3)
    }
  • 对于中止决策:

    "decision" : {
    "decision" : "abort",
    "abortStatus" : {
    "code" : 282,
    "codeName" : "TransactionCoordinatorReachedAbortDecision",
    "errmsg" : "Transaction exceeded deadline"
    }
    }

仅适用于提交协调指标

currentOp.twoPhaseCommitCoordinator.deadline

必须完成提交的日期和时间。

仅适用于提交协调指标

currentOp.opid

该操作的标识符。您可以将此值传递给 mongosh 中的 db.killOp(),以终止操作。

警告

终止正在运行的操作时要格外小心。仅使用 db.killOp() 来终止客户端发起的操作,而不会终止数据库内部操作。

currentOp.active

布尔值,指定操作是否已启动。如果操作已启动,则值为 true;如果操作处于空闲状态(例如空闲连接或当前空闲的内部线程),则值为 false。即使该操作已让位于另一个操作,该操作仍可处于活动状态。对于某些不活动的后台线程,例如不活动的 signalProcessingThread,MongoDB 会抑制各种空字段。

currentOp.secs_running

操作的持续时间(以秒计)。MongoDB 通过从操作开始时间减去当前时间来计算此值。

仅当操作正在运行时出现;即 activetrue 时出现。

currentOp.microsecs_running

操作的持续时间(以微秒计)。MongoDB 通过从操作开始时间减去当前时间来计算此值。

仅当操作正在运行时出现;即 activetrue 时出现。

currentOp.op

标识特定操作类型的字符串。只在 currentOp.typeop 时出现。

可能的值为:

  • "none"

  • "update"

  • "insert"

  • "query"

  • "command"

  • "getmore"

  • "remove"

  • "killcursors"

"query" 操作包括读取操作。

"command" 操作包括大多数命令,比如 createIndexesfindAndModify

currentOp.ns

该操作所针对的命名空间。命名空间由数据库名称和集合名称组成,通过一个点 (.) 连接起来;即 "<database>.<collection>"

currentOp.command

包含与此操作相关的完整命令对象的文档。

例如,以下输出包含在 test 数据库中 items 集合上执行的 find 操作的命令对象:

"command" : {
"find" : "items",
"filter" : {
"sku" : 1403978
},
...
"$db" : "test"
}

以下示例输出包含 getMore 操作的命令对象,该命令对象由游标 ID 为 19234103609 的命令在名为 test 的数据库中名为 items 的集合上生成:

"command" : {
"getMore" : NumberLong("19234103609"),
"collection" : "items",
"batchSize" : 10,
...
"$db" : "test"
},

如果命令文档的大小超过 1 KB,则文档的格式如下:

"command" : {
"$truncated": <string>,
"comment": <string>
}

$truncated 字段包含文档的字符串概要,不包括文档的 comment 字段(如果存在)。如果概要仍然超过 1 KB,则会进一步截断,在字符串末尾用省略号 (...) 表示。

如果将注释传递给操作,则会出现 comment 字段。任何数据库命令都可以附加注释。

currentOp.planSummary

指定该游标使用集合扫描 (COLLSCAN) 还是索引扫描 (IXSCAN { ... })。

IXSCAN 还包括所使用索引的规范文档。

currentOp.prepareReadConflicts

当前操作必须等待带有写入操作的准备事务才能提交或中止的次数。

等待过程中,当前操作会继续保存任何必要的锁和存储引擎资源。

currentOp.writeConflicts

当前操作与同一文档上另一个写入操作发生冲突的次数。

currentOp.cursor

包含 getmore 操作的游标信息的文档;即其中 opgetmore

如果在 getmore 访问其游标信息之前报告 getmore 操作,则 cursor 字段不可用。

currentOp.cursor.cursorId

游标的 ID。

currentOp.cursor.createdDate

创建游标的日期和时间。

currentOp.cursor.lastAccessDate

上次使用游标的日期和时间。

currentOp.cursor.nDocsReturned

游标返回的累计文档数量。

currentOp.cursor.nBatchesReturned

游标返回的累计批次数。

currentOp.cursor.noCursorTimeout

此标记指示游标空闲时未超时;即,如果游标设置了 noTimeout 选项。

  • 如果为 true,则游标在空闲时不会超时。

  • 如果为 false,则游标在空闲时超时。

提示

另请参阅:

currentOp.cursor.tailable

此标记指示游标是否为固定大小集合的可追加游标。在客户端用尽初始游标中的结果后,可追加游标将保持打开状态。

currentOp.cursor.awaitData

此标记指示可追加游标在等待新数据时是否应暂时阻止游标上的 getMore 命令,而不是不返回任何数据。

对于不可追加的游标,该值始终为 false。

currentOp.cursor.originatingCommand

originatingCommand 字段包含最初创建该游标的完整命令对象(即 findaggregate)。

currentOp.cursor.planSummary

指定该游标使用集合扫描 (COLLSCAN) 还是索引扫描 (IXSCAN { ... })。

IXSCAN 还包括所使用索引的规范文档。

currentOp.cursor.operationUsingCursorId

使用游标进行操作的 opid

仅当游标不空闲时才出现。

currentOp.locks

locks 文档会报告该操作当前持有的锁的类型和模式。可能的锁类型如下:

锁类型
说明
ParallelBatchWriterMode

代表并行批量写入模式的锁。

在早期版本中,PBWM 信息作为 Global 锁信息的一部分进行报告。

ReplicationStateTransition
表示副本集节点状态转换采用的锁。
Global
代表全局锁定。
Database
代表数据库锁。
Collection
代表集合锁。
Mutex
代表互斥锁。
Metadata
代表元数据锁。
DDLDatabase

表示DDL数据库锁。

版本 7.1 中的新增内容

DDLCollection

表示DDLcollection锁。

版本 7.1 中的新增内容

oplog
表示 oplog 上的锁。

可能的模式如下:

锁模式
说明
R
代表共享(S)锁。
W
代表独占 (X) 锁。
r
代表意向共享(IS)锁。
w
代表意图独占 (IX) 锁。
currentOp.admissionPriority

供内部使用。该值是操作在尝试获取票证以执行存储引擎操作时所具有的优先级。

可能的值为:“低”、“正常”和“立即”。仅报告值为“低”的操作。

currentOp 输出示例:

{
type: 'op',
host: 'ip-10-122-5-147:27017',
desc: 'JournalFlusher',
active: true,
currentOpTime: '2022-10-11T12:45:52.053+00:00',
opid: 201,
op: 'none',
ns: '',
command: {},
numYields: 0,
admissionPriority: 'low',
locks: {},
waitingForLock: false,
lockStats: {},
waitingForFlowControl: false,
flowControlStats: {}
}

admissionPriority 值还会记录在慢速日志中。

6.3 版本中的新功能

currentOp.waitingForLock

返回布尔值。如果操作正在等待锁定,waitingForLocktrue,如果操作持有所需的锁,则为 false

currentOp.msg

msg 提供一条描述操作状态和进度的消息。对于索引或 mapReduce 操作,该字段报告完成百分比。

currentOp.progress

报告 mapReduce 或索引构建操作的进度。progress 字段与 msg 字段中的完成百分比相对应。progress 指定以下信息:

currentOp.progress.done

报告已完成的数量。

currentOp.progress.total

报告总数。

currentOp.killPending

如果该操作当前被标记为待终止,则返回 true。该操作在遇到下一个安全终止点时,将会终止。

currentOp.numYields

numYields 是计数器,用于报告为让其他操作完成而让出的操作次数。

通常,当操作需要访问 MongoDB 尚未完全读入内存的数据时,它们就会让出。这使得在 MongoDB 读取让出操作的数据时,其他已经在内存中有数据的操作可以完成。

currentOp.dataThroughputLastSecond

validate 操作在上一秒处理的数据量(以 MiB 为单位)。仅适用于当前正在扫描文档的 validate 操作。例如:

"msg" : "Validate: scanning documents Validate: scanning documents: 7258/24000 30%",
"progress" : {
"done" : 7258,
"total" : 24000
},
"numYields" : 0,
"dataThroughputLastSecond" : 15.576952934265137,
"dataThroughputAverage" : 15.375944137573242,
currentOp.dataThroughputAverage

validate 操作处理的平均数据量(以 MiB 为单位)。仅适用于当前正在扫描文档的 validate操作。例如:

"msg" : "Validate: scanning documents Validate: scanning documents: 7258/24000 30%",
"progress" : {
"done" : 7258,
"total" : 24000
},
"numYields" : 0,
"dataThroughputLastSecond" : 15.576952934265137,
"dataThroughputAverage" : 15.375944137573242,
currentOp.fsyncLock

指定当前是否已为 fsync write/snapshot 锁定数据库。

仅在锁定时出现;即 fsyncLocktrue 时出现。

currentOp.info

有关如何从 db.fsyncLock() 解锁数据库的信息。仅在 fsyncLocktrue 时出现。

currentOp.lockStats

对于每种锁类型和模式(有关锁类型和模式的说明,请参阅 currentOp.locks),都会返回以下信息:

currentOp.lockStats.acquireCount

该操作在指定模式下获取锁的次数。

currentOp.lockStats.acquireWaitCount

该操作因锁处于冲突模式而不得不等待 acquireCount 锁获取的次数。acquireWaitCount 小于或等于 acquireCount

currentOp.lockStats.timeAcquiringMicros

操作获取锁所需等待的累计时间(以微秒为单位)。

timeAcquiringMicros 除以 acquireWaitCount 得出特定锁模式的大致平均等待时间。

currentOp.lockStats.deadlockCount

该操作在等待锁获取时遇到死锁的次数。

currentOp.waitingForFlowControl

一个布尔值,指示操作是否正在等待流控制。

currentOp.flowControlStats

此操作的流量控制统计信息。

currentOp.flowControlStats.acquireCount

该操作获取票证的次数。

currentOp.flowControlStats.acquireWaitCount

该操作等待获取票证的次数。

currentOp.flowControlStats.timeAcquiringMicros

此操作等待获取票证的总时间。

currentOp.totalOperationTimeElapsedSecs

当前重新分片操作所用的总时间(秒)。开始新的重新分片操作时,时间设置为 0。

仅当正在进行重新分片操作时才存在。

版本 5.0 中的新增功能

从 MongoDB 6.1 开始,该指标在重新分片期间也可在协调器上使用。

currentOp.updatesApplied

应用的更新次数。

仅在执行重新分片操作时出现在接收分片上。

6.1 版本新增内容

currentOp.remainingOperationTimeEstimatedSecs

remainingOperationTimeEstimatedSecs:当前重新分片操作的预计剩余时间(以秒为单位)。当新的重新分片操作开始时,将返回 -1

开始于:

  • MongoDB 5.0,但在 MongoDB 6.1 之前,remainingOperationTimeEstimatedSecs 仅在重新分片操作期间在接收分片上可用。

  • MongoDB 6.1,在重新分片操作期间,协调器上也可以使用 remainingOperationTimeEstimatedSecs

重新分片操作按顺序执行以下阶段:

  1. 克隆阶段复制当前的集合数据。

  2. 追赶阶段将所有待处理的写入操作应用于重新分片的集合。

remainingOperationTimeEstimatedSecs 设置为悲观的时间估计值:

  • 将追赶阶段时间估计值设置为克隆阶段时间,这是一个相对较长的时间。

  • 实际上,如果只有几个待处理的写入操作,则实际的追赶阶段时间相对较短。

版本 5.0 中的新增功能

currentOp.allShardsLowestRemainingOperationTimeEstimatedSecs

在所有分片上计算的剩余秒数的最低估值。

仅在执行重新分片操作时才出现在协调器上。

6.1 版本新增内容

currentOp.allShardsHighestRemainingOperationTimeEstimatedSecs

在所有分片上计算的剩余描述的最高估值。

仅在执行重新分片操作时才出现在协调器上。

6.1 版本新增内容

currentOp.approxDocumentsToCopy

重新分片操作期间要从发送分片复制到接收分片的大致文档数量。此数字是在重新分片操作开始时设置的估计值,设置后不会更改。开始新的重新分片操作时,该数字将被设置为 0。如果重新分片后的数据分布不完全均匀,则 $currentOp.documentsCopied$currentOp.bytesCopied 最终可能分别超过 $currentOp.approxDocumentsToCopy$currentOp.approxBytesToCopy

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

currentOp.documentsCopied

重新分片操作期间,从发送分片复制到接收分片的文档数量。开始新的重新分片操作时,该数字设置为 0。

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

currentOp.approxBytesToCopy

重新分片操作期间从发送分片复制到接收分片的大致字节数。此数字是在重新分片操作开始时设置的估计值,设置后不会更改。开始新的重新分片操作时,该数字将被设置为 0。如果重新分片后的数据分布不完全均匀,则 $currentOp.documentsCopied$currentOp.bytesCopied 最终可能分别超过 $currentOp.approxDocumentsToCopy$currentOp.approxBytesToCopy

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

currentOp.bytesCopied

重新分片操作期间从捐赠分片复制到接收分片的字节数。开始新的重新分片操作时,该数字被设置为 0。

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

currentOp.countWritesToStashCollections

写入接收储藏集合的次数。

仅在执行重新分片操作时出现在接收分片上。

6.1 版本新增内容

currentOp.countWritesDuringCriticalSection

在捐赠者的关键部分期间尝试写入的次数。

仅在执行重新分片操作时才出现在发送分片上。

6.1 版本新增内容

currentOp.countReadsDuringCriticalSection

在发送分片的关键部分尝试读取的次数。

仅在执行重新分片操作时才出现在发送分片上。

6.1 版本新增内容

currentOp.deletesApplied

应用于临时重新分片集合的删除次数。每个涉及删除的 oplog 条目都会使计数器增加 1。

仅在执行重新分片操作时出现在接收分片上。

6.1 版本新增内容

currentOp.insertsApplied

应用于临时重新分片集合的插入数量。每个涉及插入的 oplog 条目都会将计数器递增 1。

仅在执行重新分片操作时出现在接收分片上。

6.1 版本新增内容

currentOp.totalCopyTimeElapsedSecs

当前重新分片操作从发送分片到接收分片的持续数据复制任务所花费的总时间(以秒计)。开始新的重新分片操作时,时间设置为 0。

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

从 MongoDB 6.1 开始,该指标在重新分片期间也可在协调器上使用。

currentOp.oplogEntriesFetched

从当前重新分片操作oplog 获取的条目数。开始新的重新分片操作时,该数字将被设置为 0。

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

currentOp.oplogEntriesApplied

应用于当前的重新分片操作oplog 的条目数。开始新的重新分片操作时,该数字将被设置为 0。

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

currentOp.totalApplyTimeElapsedSecs

当前重新分片操作的应用步骤所用的总时间(以秒为单位)。在应用步骤中,接收分片应用 oplog 条目,根据来自发送分片的新传入写入来修改其数据。开始新的重新分片操作时,时间设置为 0。

仅在执行重新分片操作时出现在接收分片上。

版本 5.0 中的新增功能

从 MongoDB 6.1 开始,该指标在重新分片期间也可在协调器上使用。

currentOp.countWritesDuringCriticalSection

当前重新分片操作在关键部分执行的写入次数。关键部分可防止对当前正在重新分片的集合进行新的传入写入。开始新的重新分片操作时,该数字将被设置为 0。

仅在执行重新分片操作时才出现在发送分片上。

版本 5.0 中的新增功能

currentOp.totalCriticalSectionTimeElapsedSecs

当前重新分片操作的关键部分所用的总时间(以秒为单位)。关键部分可防止对当前正在重新分片的集合进行新的传入写入。开始新的重新分片操作时,时间设置为 0。

仅在执行重新分片操作时才出现在发送分片上。

版本 5.0 中的新增功能

从 MongoDB 6.1 开始,该指标在重新分片期间也可在协调器上使用。

currentOp.donorState

重新分片操作中发送分片的当前状态。当新的重新分片操作开始时,该状态将被设置为 unused

仅在执行重新分片操作时才出现在发送分片上。

说明
unused
重新分片操作即将开始或从主节点故障转移中恢复。
preparing-to-donate
源分片正准备向接收分片提供数据。
donating-initial-data
发送分片正在向接收分片发送数据。
donating-oplog-entries
发送分片正在向接收分片发送 oplog 条目。
preparing-to-block-writes
发送分片即将阻止对正在重新分片的集合进行新的传入写入操作。
error
重新分片操作过程中发生错误。
blocking-writes
发送分片正在阻止新的传入写入操作,并且发送分片已通知所有接收分片新的传入写入已禁止。
done
发送分片已经删除旧的分片集合,重新分片操作已完成。

版本 5.0 中的新增功能

currentOp.recipientState

重新分片操作中接收分片的当前状态。当新的重新分片操作开始时,该状态将被设置为 unused

仅在执行重新分片操作时才出现在发送分片上。

说明
unused
重新分片操作即将开始或从主节点故障转移中恢复。
awaiting-fetch-timestamp
接收分片正在等待发送分片做好发送数据的准备。
creating-collection
接收分片正在创建新的分片集合。
cloning
接收分片正在接收来自发送分片的数据。
applying
接收分片正在应用 oplog 条目,以根据来自发送分片的新传入写入来修改数据副本。
error
重新分片操作过程中发生错误。
strict-consistency
接收分片将所有数据更改存储在临时集合中。
done
重新分片操作已完成。

版本 5.0 中的新增功能

currentOp.coordinatorState

当前重新分片操作的重新分片协调器的状态。重新分片协调器是在配置服务器主节点上运行的操作。当新的重新分片操作开始时,该状态将被设置为 unused

仅存在于协调配置服务器上。

说明
unused
重新分片操作即将开始或从主节点故障转移中恢复。
initializing
重新分片协调器已将协调器文档插入 config.reshardingOperations 中,并将 reshardingFields 添加到原始集合的 config.collections 条目中。
preparing-to-donate

重新分片协调器

  • 已为临时重新分片集合创建了一个 config.collections 条目。

  • 已在 config.chunks 中插入了基于新分片键的范围条目。

  • 已将条目插入到与新分片键关联的任何区域的 config.tags 中。

协调器通知参与分片开始重新分片操作。然后,协调器将等待,直到所有发送分片都选择了一个 minFetchTimestamp 并准备好发送。

cloning
重新分片协调节点通知发送分片将数据发送给接收分片。协调节点等待所有接收分片完成对发送分片数据的克隆。
applying
重新分片协调器通知接收分片根据来自发送分片的新传入写入来修改其数据副本。协调器等待所有接收分片完成应用 oplog 条目。
blocking-writes
重新分片协调节点通知发送分片,以防止对正在重新分片的集合进行新的传入写入操作。然后,协调节点等待所有接收分片进行所有数据更改。
aborting
在重新分片操作或运行 abortReshardCollection 命令(或 sh.abortReshardCollection() 方法)期间出现不可恢复的错误。
committing
重新分片协调器删除了临时重新分区集合的 config.collections 条目。然后,协调器将 recipientFields 添加到源集合的条目中。

版本 5.0 中的新增功能

currentOp.opStatus

此指标已在版本 6.1 中删除。

在版本 6.1 中更改

currentOp.collUuid

采样集合的 UUID。

此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询

7.0 版本中的新增功能

currentOp.startTime

查询采样开始的时间。

此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询

7.0 版本中的新增功能

currentOp.samplesPerSecond

每秒待采样的最大查询数。

在分片集群上,这在 mongos 上而不是 mongod 上报告。在副本集上,mongod 会报告此问题。

此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询

7.0 版本中的新增功能

currentOp.sampledReadsCount

已采样读取查询的总数。

此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询

7.0 版本中的新增功能

currentOp.sampledWritesCount

采样写入查询的总数。

此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询

7.0 版本中的新增功能

currentOp.sampledReadsBytes

采样读取查询的大小,以字节为单位。

在副本集上,每个 mongod 都会报告此问题。

在分片集群上,这仅在启用了 --shardsvrmongod 上报告。

此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询

7.0 版本中的新增功能

currentOp.sampledWritesBytes

采样写入查询的大小,以字节为单位。

在副本集上,每个 mongod 都会报告此问题。

在分片集群上,这仅在启用了 --shardsvrmongod 上报告。

此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询

7.0 版本中的新增功能

后退

createIndexes