文档菜单
文档首页
/
MongoDB 手册
/ / /

$currentOp(聚合)

本页内容

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

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

相较于currentOp命令及其currentOp,更推荐使用$currentOp聚合阶段。mongosh辅助方法db.currentOp()。因为currentOp命令和db.currentOp()辅助方法都返回单个文档的结果,所以currentOp结果集的总大小受限于文档的最大16MB BSON大小限制。$currentOp阶段返回一个流文档的游标,每个文档报告一个单独的操作。每个操作文档都受限于16MB BSON限制,但与currentOp命令不同,结果集的整体大小没有限制。

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

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

$currentOp以其操作数接受一个选项文档

选项
描述

布尔值。

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

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

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

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

默认值为false

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

默认值为false

布尔值。

如果设置为true$currentOp报告“空闲”光标;即打开但不在getMore操作中活跃。

空闲光标的信息具有type设置为"idleCursor"

当前在getMore操作中活跃的光标信息,其类型(type)被设置为"op",而操作(op)被设置为getmore

默认值为false

布尔值。

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

    • 作为事务一部分持有锁的无效会话。每个无效会话在$currentOp流中以单独的文档出现。

      会话文档包含会话ID在lsid字段的信息和事务在transaction字段的信息。

      无效会话的信息,其类型(type)被设置为"idleSession"

    • $currentOp.twoPhaseCommitCoordinator在无效的state状态中

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

默认为true

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

对于在mongod上运行的$currentOp聚合操作,localOps参数没有作用。

默认值为false

布尔值。如果设置为true,则$currentOp为所有分片中的每个数据承载节点输出一个文档。如果设置为false,则$curentOp为每个分片输出一个文档。

例如,在一个包含三个分片且每个分片都是一个包含三个节点的副本集的分区集群中

  • targetAllNodes=false输出三个文档

  • targetAllNodes=true输出九个文档

默认值为false

新功能在版本7.1.

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

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

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

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

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

  • $currentOp交易 中不允许使用。

当使用 可查询加密 时,$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:truemongos 上运行时,事务信息是按分片划分的。

在没有 localOps:truemongos 上运行时,事务信息是按分片划分的。

{
"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

操作的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

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

步骤/阶段
描述
不活跃
不参与任何提交。
writingParticipantList
正在写入包含此多分片事务分片列表的本地记录。
waitingForVotes
等待参与者响应投票以提交或中止。
writingDecision
根据投票写入协调器决定提交或中止的本地记录。
waitingForDecisionAck
等待参与者承认协调器的提交或中止决定。
deletingCoordinatorDoc
删除提交决定的本地记录。

仅适用于提交协调指标。

另请参阅$currentOp.twoPhaseCommitCoordinator.stepDurations.

$currentOp.twoPhaseCommitCoordinator.commitStartTime

提交开始的时间和日期。

仅适用于提交协调指标。

$currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailover

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

如果 hasRecoveredFromFailover 为真,则 $currentOp.twoPhaseCommitCoordinator.stepDurations 中指定的某些步骤的时间可能不准确。

仅适用于提交协调指标。

$currentOp.twoPhaseCommitCoordinator.stepDurations

一个文档,包含已完成的或正在进行的步骤/状态的持续时间(以微秒为单位),以及累计总持续时间;例如

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

如果 $currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailover 为真,则 stepDurations 中指定的步骤时间可能对所有步骤都不准确。

对于处于 非活动 状态的协调器,文档为空

"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

包含与操作关联的每个用户的文档的数组。每个用户文档包含用户名和认证数据库。

技巧

另请参阅

$currentOp.runBy

包含每个冒充操作 effectiveUser(s) 的用户的文档的数组。runBy 文档包含用户名和认证数据库。通常,冒充用户是 __system 用户;例如。

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

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

警告

请谨慎终止正在运行的操作。仅使用 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

分片集群事务中操作读取的快照时间戳。对于分片集群上的事务,数据的读取关注点 "快照"读取关注点 在分片中同步;即其他读取关注点不能保证数据来自分片间的相同快照视图。

仅在运行 localOps: true 时,对于分片集群事务才存在。

$currentOp.transaction.readTimestamp

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

仅在操作是多文档事务的一部分时存在。然而,如果

则不返回该字段。相反,返回 $currentOp.transaction.globalReadTimestamp

$currentOp.transaction.startWallClockTime

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

只有当操作是多文档事务的一部分时才存在。

$currentOp.transaction.timeOpenMicros

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

timeActiveMicros值加上timeInactiveMicros值应该等于timeOpenMicros

只有当操作是多文档事务的一部分时才存在。

$currentOp.transaction.timeActiveMicros

事务活跃的总时间;即事务有操作运行时的时间。

timeActiveMicros值加上timeInactiveMicros值应该等于timeOpenMicros

只有当操作是多文档事务的一部分时才存在。

$currentOp.transaction.timeInactiveMicros

事务不活跃的总时间;即事务没有操作运行时的时间。

timeInactiveMicros 的值加到 timeActiveMicros 上,应该等于 timeOpenMicros

只有当操作是多文档事务的一部分时才存在。

$currentOp.transaction.numParticipants

参与此事务的分片数量。

仅在操作是分片集群事务的一部分且 $currentOplocalOps: true 运行时才存在。

$currentOp.transaction.participants

一个文档数组,详细说明了参与此事务的分片。每个文档包含名称、一个标志表示分片是否作为提交协调器、以及一个标志表示分片是否仅参与事务的读操作。

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

仅在操作是分片集群事务的一部分且 $currentOplocalOps: true 运行时才存在。

$currentOp.transaction.numReadOnlyParticipants

本事务中仅受读操作影响的分片数量。

仅在操作是分片集群事务的一部分且 $currentOplocalOps: true 运行时才存在。

$currentOp.transaction.numNonReadOnlyParticipants

本事务中受除读操作之外的操作影响的分片数量。

仅在操作是分片集群事务的一部分且 $currentOplocalOps: 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

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

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

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

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

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

如果命令文档超过 1 千字节,则文档具有以下形式

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

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

如果操作传递了注释,则存在 comment 字段。注释可以附加到任何 数据库命令。

$currentOp.cursor

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

如果在 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 选项。

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

  • 如果为假,游标在空闲时会超时。

技巧

另请参阅

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

新功能在版本8.0.

queryShapeHash 是一个十六进制字符串,包含 查询形状 的哈希值。详细信息请参见 查询形状

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

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

锁类型
描述
ParallelBatchWriterMode

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

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

ReplicationStateTransition
表示用于复制集成员状态转换的锁。
Global
表示全局锁。
Database
表示数据库锁。
Collection
表示集合锁。
Mutex
表示互斥锁。
Metadata
表示元数据锁。
DDLDatabase

表示 DDL 数据库锁。

新功能在版本7.1.

DDLCollection

表示 DDL 集合锁。

新功能在版本7.1.

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

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

仅在正在进行分片操作时出现在目标分片上。

新功能在版本5.0.

$currentOp.totalCopyTimeElapsed

对于当前resharding操作,从捐赠分片到接收分片进行的数据复制任务所消耗的总时间,单位为秒。当新的resharding操作开始时,该时间设置为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

重分片操作中捐赠碎片的当前状态。当新的重分片操作开始时,状态设置为未使用

仅在重分片操作进行时出现在捐赠碎片上。

状态
描述
未使用
重分片操作即将开始或正在从主节点故障转移中恢复。
准备捐赠
捐赠碎片正在准备向接收碎片捐赠数据。
捐赠初始数据
捐赠碎片正在向接收碎片捐赠数据。
捐赠操作日志条目
捐赠碎片正在向接收碎片捐赠操作日志条目。
准备阻止写入
捐赠碎片即将阻止新写入操作到正在重分片的集合。
错误
在重分片操作过程中发生了错误。
阻止写入
捐赠碎片正在阻止新写入操作,并已通知所有接收碎片防止新写入。
完成
捐赠碎片已删除旧分片集合,重分片操作已完成。

新功能在版本5.0.

$currentOp.recipientState

resharding操作中接收分片的状态。当新的resharding操作开始时,状态设置为unused。

仅在重分片操作进行时出现在捐赠碎片上。

状态
描述
未使用
重分片操作即将开始或正在从主节点故障转移中恢复。
awaiting-fetch-timestamp
接收分片正在等待捐赠分片准备捐赠其数据。
creating-collection
接收分片正在创建新的分片集合。
cloning
接收分片正在从捐赠分片接收数据。
applying
接收分片正在应用oplog条目来修改其数据副本,这些数据基于从捐赠分片的新写入。
错误
resharding操作期间发生错误。
strict-consistency
接收分片已将所有数据更改存储在临时集合中。
完成
resharding操作已完成。

新功能在版本5.0.

$currentOp.coordinatorState

当前resharding操作resharding协调器状态。resharding协调器是在config server主节点上运行的操作。当新的resharding操作开始时,状态设置为unused。

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

状态
描述
未使用
重分片操作即将开始或正在从主节点故障转移中恢复。
initializing
resharding协调器已将协调器文档插入到config.reshardingOperations中,并将reshardingFields添加到原始集合的config.collections条目中。
准备捐赠

resharding协调器

  • 为临时resharding集合创建了config.collections条目。

  • 已根据新的分片键插入条目到 config.chunks 中。

  • 已根据新的分片键插入条目到 config.tags 中,针对任何相关的区域。

协调器通知参与的分片开始重新分片操作。然后协调器等待所有捐赠分片选择一个 minFetchTimestamp 并准备捐赠。

cloning
重新分片协调器通知捐赠分片向接收分片捐赠数据。协调器等待所有接收分片完成从捐赠分片克隆数据。
applying
重新分片协调器通知接收分片根据捐赠分片的新写入操作修改其数据副本。协调器等待所有接收分片完成应用 操作日志 条目。
阻止写入
重新分片协调器通知捐赠分片防止对正在重新分片集合的新写入操作。然后协调器等待所有接收分片获取所有数据变更。
中止
在重新分片操作期间发生了不可恢复的错误,或者在执行了 abortReshardCollection 命令(或 sh.abortReshardCollection() 方法)。
提交
重新分片协调器从临时重新分片集合的 config.collections 条目中删除条目。然后协调器将 recipientFields 添加到源集合的条目中。

新功能在版本5.0.

$currentOp.opStatus

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

只有在进行重新分片操作时才存在。一旦操作完成,该操作就会从 currentOp 输出中删除。

状态
描述
正在运行
重新分片操作正在积极运行。
成功
重新分片操作已成功。
失败
重新分片操作已失败。
已取消
重新分片操作已被取消。

新功能在版本5.0.

$currentOp.collUuid

被采样集合的UUID。

该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。

新功能在版本7.0.

$currentOp.startTime

查询采样开始的时间。

该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。

新功能在版本7.0.

$currentOp.samplesPerSecond

每秒可采样的查询最大数量。

仅在运行$currentOpmongos时报告。

该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。

新功能在版本7.0.

$currentOp.sampledReadsCount

样本读取查询的数量。

该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。

新功能在版本7.0.

$currentOp.sampledWritesCount

样本写入查询的数量。

该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。

新功能在版本7.0.

$currentOp.sampledReadsBytes

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

在副本集中,此信息在每一个 mongod 上报告。

在分片集群中,此信息仅在带有 --shardsvrmongod 上报告。

该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。

新功能在版本7.0.

$currentOp.sampledWritesBytes

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

在副本集中,此信息在每一个 mongod 上报告。

在分片集群中,此信息仅在带有 --shardsvrmongod 上报告。

该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。

新功能在版本7.0.

返回

$count