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

$currentOp(聚合)

在此页面上

  • 定义
  • 约束
  • 示例
  • 输出字段
$currentOp

返回一个文档流,其中包含有关活动和/或休眠操作以及作为ACID 事务一部分持有锁的非活动会话的信息。 该阶段会为每个操作或会话返回一个文档。 要运行$currentOp ,请在admin数据库上使用 db.aggregate()辅助程序。

$currentOp聚合阶段优先于currentOp命令及其 mongosh辅助方法db.currentOp() 。 由于currentOp命令和db.currentOp()辅助方法在单个文档中返回结果,因此currentOp结果集的总大小受到文档最大16 MB BSON 大小限制的约束。 $currentOp阶段返回针对一系列文档的游标,其中每个文档均报告一个操作。 每个操作文档均受16 MB BSON 限制的约束,但与currentOp命令不同的是,它对结果集的总体大小没有限制。

$currentOp 还允许您在文档通过管道时对结果执行任意转换。

{ $currentOp: { allUsers: <boolean>, idleConnections: <boolean>, idleCursors: <boolean>, idleSessions: <boolean>, localOps: <boolean> } }

$currentOp 将选项文档作为其操作数:

选项
说明

布尔值。

  • 如果设置为 false$currentOp 仅报告属于运行该命令的用户的操作/空闲连接/空闲游标/空闲会话。

  • 如果设置为 true$currentOp 将报告属于所有用户的操作。

对于强制执行访问控制的独立运行和副本集,如果 allUsers: true,则需要 inprog 特权。

对于强制执行访问控制的分片集群,需要 inprog 特权才能运行 $currentOp

默认值为 false

布尔值。如果设置为 false,则 $currentOp 仅报告活动操作。如果设置为 true$currentOp 将返回所有操作,包括空闲连接。

默认值为 false

布尔值。

如果设置为 true,则 $currentOp 报告“空闲”的游标;即在 getMore 操作中打开但当前未处于活动状态。

有关空闲游标的信息将type 设立为"idleCursor"

有关 操作中当前处于活动状态的游标的信息,会将getMore type设立为"op" ,并将op 设立为getmore

默认值为 false

布尔值。

  • 如果设置为 true,除了活动/休眠操作外,$currentOp 还会报告:

    • 作为事务的一部分持有锁的非活动会话。每个非活动会话在 $currentOp 流中显示为单独的文档。

      会话的文档在 字段中包含会话ID的信息,在 字段中包含ACIDlsid transaction事务的信息。

      有关空闲会话的信息,将type 设立为"idleSession"

    • $currentOp.twoPhaseCommitCoordinator in inactive state

  • 如果设置为 false$currentOp 则不报告:

默认值为 true

布尔值。如果将在 mongos 上运行的聚合设置为 true,则 $currentOp 仅报告在该 mongos 上本地运行的操作。如果是 false,则 $currentOp 报告在分片上运行的操作。

localOps 参数对 mongod 上运行的 $currentOp 聚合没有任何影响。

默认值为 false

布尔值。确定调用堆栈信息是否作为waitingForLatch 输出字段的一部分返回。

  • 如果设立为true ,则$currentOp 包括waitingForLatch.backtrace 字段,其中包含调用堆栈信息(如果可用)。如果不可用,则该字段包含一个空大量。

  • 如果设立为false$currentOp 将省略waitingForLatch.backtrace 字段。

默认值为 false

省略上述任何参数都会导致 $currentOp 使用该参数的默认值。如下所示,指定空文档以使用所有参数的默认值。

{ $currentOp: { } }
  • $currentOp 必须是管道的第一阶段。

  • $currentOp 开头的管道只能在 admin 数据库上运行。

  • 对于强制执行访问控制的独立集和副本集,如果 allUsers: true,则需要 inprog 权限才能运行 $currentOp

  • 对于强制执行访问控制的分片集群,需要 inprog 特权才能运行 $currentOp

  • $currentOp 不允许在事务中使用。

使用 Queryable Encryption 时,$currentOp 输出会编辑某些信息:

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

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

以下示例展示了如何使用 $currentOp 聚合阶段。

此示例返回在事务中持有锁的非活动会话的信息。具体而言:

  • 第一阶段返回所有活动操作的文档,以及作为事务一部分持有锁的非活动会话的文档。

  • 第二阶段会筛选有关在事务中持有锁的非活动会话的文档。

db.getSiblingDB("admin").aggregate( [
{ $currentOp : { allUsers: true, idleSessions: true } },
{ $match : { active: false, transaction : { $exists: true } } }
] )

您可以使用 $currentOp.type 指定一个等效的过滤器:

db.getSiblingDB("admin").aggregate( [
{ $currentOp : { allUsers: true, idleSessions: true } },
{ $match : { type: "idleSession" } }
] )

提示

对于分片集群上的事务,请在前面的示例中包含 localOps:true,以获得事务的复合视图。

两个操作均返回以下形式的文档:

在作为副本集一部分的 mongod 上运行时:

{
"type" : "idleSession",
"host" : "example.mongodb.com:27017",
"desc" : "inactive transaction",
"client" : "198.51.100.1:50428",
"connectionId" : NumberLong(32),
"appName" : "",
"clientMetadata" : {
"driver" : {
"name" : "PyMongo",
"version" : "3.9.0"
},
"os" : {
"type" : "Darwin",
"name" : "Darwin",
"architecture" : "x86_64",
"version" : "10.14.5"
},
"platform" : "CPython 3.7.1.final.0"
},
"lsid" : {
"id" : UUID("ff21e1a9-a130-4fe0-942f-9e6b6c67ea3c"),
"uid" : BinData(0,"3pxqkATNUYKV/soT7qqKE0zC0BFb0pBz1pk4xXcSHsI=")
},
"transaction" : {
"parameters" : {
"txnNumber" : NumberLong(4),
"autocommit" : false,
"readConcern" : {
"level" : "snapshot",
"afterClusterTime" : Timestamp(1563892246, 1)
}
},
"readTimestamp" : Timestamp(0, 0),
"startWallClockTime" : "2019-07-23T10:30:49.461-04:00",
"timeOpenMicros" : NumberLong(1913590),
"timeActiveMicros" : NumberLong(55),
"timeInactiveMicros" : NumberLong(1913535),
"expiryTime" : "2019-07-23T10:31:49.461-04:00"
},
"waitingForLock" : false,
"active" : false,
"locks" : {
"ReplicationStateTransition" : "w",
"Global" : "w",
"Database" : "w",
"Collection" : "w"
},
"lockStats" : {
"ReplicationStateTransition" : {
"acquireCount" : {
"w" : NumberLong(5)
}
},
"Global" : {
"acquireCount" : {
"r" : NumberLong(3),
"w" : NumberLong(1)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(2),
"w" : NumberLong(1)
}
},
"Collection" : {
"acquireCount" : {
"w" : NumberLong(1)
}
},
"Mutex" : {
"acquireCount" : {
"r" : NumberLong(3)
}
},
"oplog" : {
"acquireCount" : {
"r" : NumberLong(2)
}
}
},
"waitingForFlowControl" : false,
"flowControlStats" : {},
}

使用 localOps:true 运行 $currentOp 时,可提供在该 mongos 上运行的进行中事务的综合视图(而非每个分片的信息)。

db.getSiblingDB("admin").aggregate( [
{ $currentOp : { allUsers: true, idleSessions: true, localOps: true } },
{ $match : { type: "idleSession" } }
] );
// or
db.getSiblingDB("admin").aggregate( [
{ $currentOp : { allUsers: true, idleSessions: true, localOps: true } },
{ $match : { active: false, transaction : { $exists: true } } }
] )
{
"type" : "idleSession",
"host" : "example.mongodb.com:27017",
"desc" : "inactive transaction",
"client" : "198.51.100.1:49618",
"connectionId" : NumberLong(48),
"appName" : "",
"clientMetadata" : {
"driver" : {
"name" : "PyMongo",
"version" : "3.9.0"
},
"os" : {
"type" : "Darwin",
"name" : "Darwin",
"architecture" : "x86_64",
"version" : "10.14.6"
},
"platform" : "CPython 3.7.1.final.0",
"mongos" : {
"host" : "example.mongodb.com:27017",
"client" : "198.51.100.1:53268",
"version" : "4.2.1"
}
},
"lsid" : {
"id" : UUID("2c9ce111-133e-45b7-a00f-a7871005cae1"),
"uid" : BinData(0,"3pxqkATNUYKV/soT7qqKE0zC0BFb0pBz1pk4xXcSHsI=")
},
"active" : false,
"transaction" : {
"parameters" : {
"txnNumber" : NumberLong(2),
"autocommit" : false,
"readConcern" : {
"level" : "snapshot",
"afterClusterTime" : Timestamp(1571869019, 2)
}
},
"globalReadTimestamp" : Timestamp(1571869019, 2),
"startWallClockTime" : "2019-10-23T18:16:59.341-04:00",
"timeOpenMicros" : NumberLong(169244639),
"timeActiveMicros" : NumberLong(535),
"timeInactiveMicros" : NumberLong(169244104),
"numParticipants" : 2,
"participants" : [
{
"name" : "shardB",
"coordinator" : true,
"readOnly" : false
},
{
"name" : "shardA",
"coordinator" : false,
"readOnly" : false
}
],
"numReadOnlyParticipants" : 0,
"numNonReadOnlyParticipants" : 2
}
}

当在没有localOps:true的情况下在mongos上运行时,ACID 事务信息以每个分片为分片。

在不带 localOps:truemongos 的 上运行时,ACID 事务信息为每个分分片。

{
"shard" : "shardB",
"type" : "idleSession",
"host" : "shardB.mongodb.com:27018",
"desc" : "inactive transaction",
"client_s" : "198.51.100.1:53961",
"connectionId" : NumberLong(63),
"appName" : "",
"clientMetadata" : {
"driver" : {
"name" : "PyMongo",
"version" : "3.9.0"
},
"os" : {
"type" : "Darwin",
"name" : "Darwin",
"architecture" : "x86_64",
"version" : "10.14.6"
},
"platform" : "CPython 3.7.1.final.0",
"mongos" : {
"host" : "example.mongodb.com:27017",
"client" : "198.51.100.1:53976",
"version" : "4.2.0"
}
},
"lsid" : {
"id" : UUID("720d403c-8daf-40bb-b61e-329e20b0493b"),
"uid" : BinData(0,"3pxqkATNUYKV/soT7qqKE0zC0BFb0pBz1pk4xXcSHsI=")
},
"transaction" : {
"parameters" : {
"txnNumber" : NumberLong(1),
"autocommit" : false,
"readConcern" : {
"level" : "snapshot"
}
},
"readTimestamp" : Timestamp(0, 0),
"startWallClockTime" : "2019-10-21T18:31:12.192-04:00",
"timeOpenMicros" : NumberLong(24137008),
"timeActiveMicros" : NumberLong(52),
"timeInactiveMicros" : NumberLong(24136956),
"expiryTime" : "2019-10-21T18:32:12.192-04:00"
},
"waitingForLock" : false,
"active" : false,
"locks" : {
"ReplicationStateTransition" : "w",
"Global" : "w",
"Database" : "w",
"Collection" : "w"
},
"lockStats" : {
"ReplicationStateTransition" : {
"acquireCount" : {
"w" : NumberLong(3)
}
},
"Global" : {
"acquireCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
}
},
"Mutex" : {
"acquireCount" : {
"r" : NumberLong(6)
}
}
}
}
{
"shard" : "shardA",
"type" : "idleSession",
...
}

此示例返回有关查询采样过程的信息。

  • 第一阶段返回所有活动操作的文档。

  • 第二阶段筛选与查询分析器相关的文档。

db.getSiblingDB("admin").aggregate( [
{ $currentOp: { allUsers: true, localOps: true } },
{ $match: { desc: "query analyzer" } }
] )

此管道返回类似于以下内容的输出:

对属于副本集一部分的 mongod 运行时:

{
"desc" : "query analyzer",
"ns" : "testDb.testColl",
"collUuid" : UUID("ed9dfb1d-5b7c-4c6b-82e9-b0f537335795"),
"samplesPerSecond" : 5,
"startTime" : ISODate("2023-08-08T16:23:22.846Z"),
"sampledReadsCount" : NumberLong(2),
"sampledReadsBytes" : NumberLong(346),
"sampledWritesCount" : NumberLong(3),
"sampledWritesBytes" : NumberLong(904)
}

在作为分片集群一部分的 mongos 上运行时:

{
"desc" : "query analyzer",
"ns" : "testDb.testColl",
"collUuid" : UUID("5130b4df-5966-434f-85f0-f8956b5ca74e"),
"samplesPerSecond" : 5,
"startTime" : ISODate("2023-08-08T16:15:07.427Z"),
"sampledReadsCount" : NumberLong(2),
"sampledWritesCount" : NumberLong(3)
}

在作为分片集群一部分的 mongod --shardsvr 上运行时:

{
"desc" : "query analyzer",
"ns" : "testDb.testColl",
"collUuid" : UUID("5130b4df-5966-434f-85f0-f8956b5ca74e"),
"startTime" : ISODate("2023-08-08T16:15:07.427Z"),
"sampledReadsCount" : NumberLong(2),
"sampledReadsBytes" : NumberLong(346),
"sampledWritesCount" : NumberLong(3),
"sampledWritesBytes" : NumberLong(904)
}

每个输出文档可能包含与操作相关的以下字段的子集:

$currentOp.type

操作类型。值为:

  • op

  • idleSession

  • idleCursor

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

$currentOp.host

运行操作的主机的名称。

$currentOp.shard

运行操作的分区名称。

仅针对分片群集而存在。

$currentOp.desc

操作的描述。

$currentOp.connectionId

特定操作所在连接的标识符。

$currentOp.client

操作所在客户端连接的 IP 地址(或主机名)和临时端口。

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

仅适用于独立运行模式和副本集模式

$currentOp.client_s

发起操作的 mongos 的 IP 地址(或主机名)和临时端口。

仅适用于分片集群

$currentOp.clientMetadata

有关客户端的其他信息。

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

$currentOp.appName

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

$currentOp.active

布尔值,指定操作是否已启动。如果操作已启动,则值为 true;如果操作处于空闲状态(例如空闲连接、非活动会话或当前空闲的内部线程),则值为 false。即使该操作已让位于另一个操作,该操作仍可处于活动状态。

$currentOp.twoPhaseCommitCoordinator

有关以下任一信息:

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

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

    仅筛选提交协调指标:

    db.getSiblingDB("admin").aggregate( [
    { $currentOp: { allUsers: true, idleSessions: true } },
    { $match: { desc: "transaction coordinator" } }
    ] )
  • 特定的提交协调操作(即typeopdesc"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.currentOpTime

操作的开始时间。

$currentOp.effectiveUsers

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

提示

另请参阅:

$currentOp.runBy

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

"runBy" : [
{
"user" : "__system",
"db" : "local"
}
]
$currentOp.opid

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

警告

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

$currentOp.secs_running

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

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

$currentOp.microsecs_running

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

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

$currentOp.lsid

会话标识符。

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

$currentOp.transaction

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

只有当操作是事务的一部分时才会起出现:

  • 在副本集上。

  • 如果运行 $currentOp不使用 localOps:true,则在分片集群上事务信息按分片统计。

  • 在分片集群上,如果运行 $currentOp 时使用 localOps:true。事务信息是复合视图,而不是按分片显示的。

$currentOp.transaction.parameters

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

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

$currentOp.transaction.parameters.txnNumber

事务编号。

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

$currentOp.transaction.parameters.autocommit

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

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

$currentOp.transaction.parameters.readConcern

事务的读关注

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

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

$currentOp.transaction.globalReadTimestamp

使用“快照”读关注的分片集群事务中的操作获取的快照读取的时间戳。对于分片集群上的事务,数据的读关注 "snapshot" 是跨分片同步的;即其他读关注不保证该数据来自跨分片的同一快照视图。

对于分片集群事务,仅当 localOps: true 时出现。

$currentOp.transaction.readTimestamp

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

仅当操作是多文档事务的一部分时才出现。但是,如果出现以下情况,则不会返回字段

相反,会返回 $currentOp.transaction.globalReadTimestamp

$currentOp.transaction.startWallClockTime

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

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

$currentOp.transaction.timeOpenMicros

事务的持续时间(以微秒为单位)。

添加至 timeInactiveMicrostimeActiveMicros 值应该等于 timeOpenMicros

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

$currentOp.transaction.timeActiveMicros

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

添加至 timeInactiveMicrostimeActiveMicros 值应该等于 timeOpenMicros

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

$currentOp.transaction.timeInactiveMicros

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

添加至 timeActiveMicrostimeInactiveMicros 值应该等于 timeOpenMicros

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

$currentOp.transaction.numParticipants

参与此事务的分片数量。

仅当该操作是分片集群上事务的一部分并且 $currentOp 使用 localOps: true 运行时才出现

$currentOp.transaction.participants

详细说明参与此事务中的分片的一系列文档。每个文档都包含名称、指示分片是否充当提交协调器的标记以及指示分片是否仅参与事务的读取操作的标记。

{
"name" : "shardA",
"coordinator" : false,
"readOnly" : false
}

仅当该操作是分片集群上事务的一部分并且 $currentOp 使用 localOps: true 运行时才出现

$currentOp.transaction.numReadOnlyParticipants

仅受该事务中读取操作影响的分片数。

仅当该操作是分片集群上事务的一部分并且 $currentOp 使用 localOps: true 运行时才出现

$currentOp.transaction.numNonReadOnlyParticipants

在该事务中受读取以外操作影响的分片数。

仅当该操作是分片集群上事务的一部分并且 $currentOp 使用 localOps: true 运行时才出现

$currentOp.transaction.expiryTime

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

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

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

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

$currentOp.op

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

可能的值为:

  • "none"

  • "update"

  • "insert"

  • "query"

  • "command"

  • "getmore"

  • "remove"

  • "killcursors"

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

"query" 操作包括 find 操作和 OP_QUERY 操作。

$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.cursor

包含 idleCursorgetmore 操作的游标信息的文档;即 其中 typeidleCursoropgetmore

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

$currentOp.cursor.cursorId

游标的 ID。

$currentOp.cursor.createdDate

创建游标的日期和时间。

$currentOp.cursor.lastAccessDate

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

如果游标正在使用中(即 opgetmore,而 type 不是 idleCursor),那么 lastAccessDate 就会报告前一个 getmore 的结束时间,如果这是第一个 getmore,则报告游标的创建时间。

$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 还包括所使用索引的规范文档。

mongos 上运行并指定 localOps: true 或在 idleCursors 上报告时不可用。

$currentOp.cursor.operationUsingCursorId

使用游标进行操作的 opid

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

$currentOp.cursor.queryFramework

6.2 版本新增

指定用于处理操作的查询框架的字符串。

$currentOp.planSummary

一个字符串,指定该游标使用集合扫描 (COLLSCAN) 还是索引扫描 (IXSCAN { ... })。

mongos 上使用 localOps: true 运行时不可用。

$currentOp.prepareReadConflicts

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

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

$currentOp.writeConflicts

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

$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.waitingForLatch

仅当操作正在等待获取内部锁原语(又名锁存器)或等待满足内部条件时,waitingForLatch 文档才可用。

例如,

"waitingForLatch" : {
"timestamp" : ISODate("2020-03-19T23:25:58.412Z"),
"captureName" : "FutureResolution",
"backtrace" : [ ] // Only if backtrace: true
},
输出字段
说明

timestamp

操作开始等待的日期和时间。

captureName

当前操作受阻的区段的内部名称。

backtrace

调用堆栈(如果可用)。仅当 backtrace: true 时才包含该字段。

$currentOp.locks

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

锁类型
说明

ParallelBatchWriterMode

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

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

ReplicationStateTransition

表示副本集节点状态转换采用的锁。

Global

代表全局锁定。

Database

代表数据库锁。

Collection

代表集合锁。

Mutex

代表互斥锁。

Metadata

代表元数据锁。

oplog

表示 oplog 上的锁。

可能的模式如下:

锁模式
说明

R

代表共享(S)锁。

W

代表独占 (X) 锁。

r

代表意向共享(IS)锁。

w

代表意图独占 (IX) 锁。

$currentOp.lockStats

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

$currentOp.lockStats.acquireCount

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

$currentOp.lockStats.acquireWaitCount

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

$currentOp.lockStats.timeAcquiringMicros

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

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

$currentOp.lockStats.deadlockCount

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

$currentOp.waitingForLock

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

$currentOp.msg

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

$currentOp.progress

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

$currentOp.progress.done

报告已完成的工作项数量。

$currentOp.progress.total

报告工作项总数。

$currentOp.killPending

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

$currentOp.waitingForFlowControl

一个布尔值,表示该操作是否因为流量控制而需要等待。

$currentOp.flowControlStats

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

$currentOp.flowControlStats.acquireCount

该操作获取票证的次数。

$currentOp.flowControlStats.acquireWaitCount

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

$currentOp.flowControlStats.timeAcquiringMicros

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

$currentOp.totalOperationTimeElapsed

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

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

版本 5.0 中的新增功能

$currentOp.remainingOperationTimeEstimated

当前重新分片操作的预计剩余时间(秒)。开始新的重新分片操作时,时间设置为 -1。

仅在执行重新分片操作时出现。如果无法计算估计值,则此字段可能不存在。

版本 5.0 中的新增功能

$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.totalCopyTimeElapsed

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

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

版本 5.0 中的新增功能

$currentOp.oplogEntriesFetched

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

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

版本 5.0 中的新增功能

$currentOp.oplogEntriesApplied

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

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

版本 5.0 中的新增功能

$currentOp.totalApplyTimeElapsed

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

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

版本 5.0 中的新增功能

$currentOp.countWritesDuringCriticalSection

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

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

版本 5.0 中的新增功能

$currentOp.totalCriticalSectionTimeElapsed

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

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

版本 5.0 中的新增功能

$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

重新分片操作的当前状态。

仅在执行重新分片操作时出现。操作完成后,该操作将从 currentOp 输出中删除。

说明

actively running

重新分片操作正在主动运行。

success

重新分片操作已成功。

failure

重新分片操作失败。

canceled

重新分片操作已取消。

版本 5.0 中的新增功能

$currentOp.collUuid

采样集合的 UUID。

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

7.0 版本中的新增功能

$currentOp.startTime

查询采样开始的时间。

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

7.0 版本中的新增功能

$currentOp.samplesPerSecond

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

仅在 mongos 上运行 $currentOp 时报告。

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

7.0 版本中的新增功能

$currentOp.sampledReadsCount

已采样读取查询的总数。

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

7.0 版本中的新增功能

$currentOp.sampledWritesCount

采样写入查询的总数。

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

7.0 版本中的新增功能

$currentOp.sampledReadsBytes

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

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

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

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

7.0 版本中的新增功能

$currentOp.sampledWritesBytes

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

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

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

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

7.0 版本中的新增功能

后退

$count