$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
以其操作数接受一个选项文档
选项 | 描述 |
---|---|
布尔值。
对于强制执行访问控制的独立副本集,如果 对于强制执行访问控制的分片集群,运行 默认值为 | |
布尔值。如果设置为 默认值为 | |
布尔值。
默认为 | |
布尔值。如果设置为 例如,在一个包含三个分片且每个分片都是一个包含三个节点的副本集的分区集群中
默认值为 新功能在版本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:true 的 mongos
上运行时,事务信息是按分片划分的。
在没有 localOps:true 的 mongos
上运行时,事务信息是按分片划分的。
{ "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.type
是op
,则$currentOp.op
提供了特定操作的详细信息。
$currentOp.client
客户端连接的IP地址(或主机名)和临时端口号,其中操作发起。
对于多文档事务,
$currentOp.client
存储有关在事务中运行操作的最近客户端的信息。仅适用于独立实例和副本集
$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" } } ] ) 由事务协调器产生的特定提交协调操作(例如,
type
是op
且desc
是"TransactionCoordinator"
)。
注意
如果使用 idleSessions: false 运行,则
$currentOp
在inactive
的state
中不返回$currentOp.twoPhaseCommitCoordinator
信息。如果启用访问控制并且 allUsers: false,则
$currentOp
不返回$currentOp.twoPhaseCommitCoordinator
信息。
$currentOp.twoPhaseCommitCoordinator.action
由事务协调器产生的特定提交协调操作
"sendingPrepare"
"sendingCommit"
"sendingAbort"
"writingParticipantList"
"writingDecision"
"deletingCoordinatorDoc"
仅适用于特定的 协调操作。
$currentOp.twoPhaseCommitCoordinator.numParticipants
参与此提交的分片数量。
仅适用于提交协调指标。
$currentOp.twoPhaseCommitCoordinator.state
提交协调过程的当前步骤/状态。
步骤/阶段描述不活跃
不参与任何提交。writingParticipantList
正在写入包含此多分片事务分片列表的本地记录。waitingForVotes
等待参与者响应投票以提交或中止。writingDecision
根据投票写入协调器决定提交或中止的本地记录。waitingForDecisionAck
等待参与者承认协调器的提交或中止决定。deletingCoordinatorDoc
删除提交决定的本地记录。仅适用于提交协调指标。
$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.decision
包含提交/中止决策的文档,例如
对于提交决策
"decision" : { "decision" : "commit", "commitTimestamp" : Timestamp(1572034669, 3) } 对于中止决策
"decision" : { "decision" : "abort", "abortStatus" : { "code" : 282, "codeName" : "TransactionCoordinatorReachedAbortDecision", "errmsg" : "Transaction exceeded deadline" } }
仅适用于提交协调指标。
$currentOp.twoPhaseCommitCoordinator.deadline
提交必须在截止日期和时间内完成。
仅适用于提交协调指标。
$currentOp.runBy
包含每个冒充操作
effectiveUser(s)
的用户的文档的数组。runBy 文档包含用户名和认证数据库。通常,冒充用户是__system
用户;例如。"runBy" : [ { "user" : "__system", "db" : "local" } ]
$currentOp.opid
操作的标识符。您可以将此值传递到
db.killOp()
中,以在mongosh
中终止操作。警告
请谨慎终止正在运行的操作。仅使用
db.killOp()
终止客户端发起的操作,不要 终止内部数据库操作。
$currentOp.secs_running
操作持续时间的秒数。MongoDB通过从操作的起始时间减去当前时间来计算此值。
仅在操作正在运行时存在;即如果
active
为true
。
$currentOp.microsecs_running
操作持续时间的微秒数。MongoDB通过从操作的起始时间减去当前时间来计算此值。
仅在操作正在运行时存在;即如果
active
为true
。
$currentOp.transaction
包含多文档事务信息的文档。
只有当操作是事务的一部分时才存在。
在副本集上。
在分片集群上,如果运行
$currentOp
时未设置 localOps:true。事务信息按分片划分。在分片集群上,如果运行
$currentOp
时设置了 localOps:true。事务信息是一个复合视图,而不是按分片划分。
$currentOp.transaction.parameters
包含多文档事务信息的文档。
只有当操作是多文档事务的一部分时才存在。
$currentOp.transaction.parameters.readConcern
事务的读取关注点。
多文档事务支持读取关注点
"snapshot"
,"local"
,和"majority"
。只有当操作是多文档事务的一部分时才存在。
$currentOp.transaction.globalReadTimestamp
分片集群事务中操作读取的快照时间戳。对于分片集群上的事务,数据的读取关注点 "快照"读取关注点 在分片中同步;即其他读取关注点不能保证数据来自分片间的相同快照视图。
仅在运行 localOps: true 时,对于分片集群事务才存在。
$currentOp.transaction.readTimestamp
此事务中操作正在读取的快照的时间戳
仅在操作是多文档事务的一部分时存在。然而,如果
事务在分片集群上,并使用 "快照"读取关注点,并且
$currentOp
运行时带有 localOps: true.
则不返回该字段。相反,返回
$currentOp.transaction.globalReadTimestamp
。
$currentOp.transaction.timeOpenMicros
事务的持续时间(以微秒为单位)。
timeActiveMicros
值加上timeInactiveMicros
值应该等于timeOpenMicros
。只有当操作是多文档事务的一部分时才存在。
$currentOp.transaction.timeActiveMicros
事务活跃的总时间;即事务有操作运行时的时间。
timeActiveMicros
值加上timeInactiveMicros
值应该等于timeOpenMicros
。只有当操作是多文档事务的一部分时才存在。
$currentOp.transaction.timeInactiveMicros
事务不活跃的总时间;即事务没有操作运行时的时间。
将
timeInactiveMicros
的值加到timeActiveMicros
上,应该等于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.type
是op
时存在。可能的值包括
"none"
"update"
"insert"
"query"
"command"
"getmore"
"remove"
"killcursors"
"command"
操作包括大多数 命令,例如createIndexes
、aggregate
和findAndModify
。"query"
操作包括find
操作和 OP_QUERY 操作。
$currentOp.command
包含与此操作相关联的完整命令对象的文档。
例如,以下输出包含在名为
items
的集合中执行名为find
操作的命令对象,在名为test
的数据库中。"command" : { "find" : "items", "filter" : { "sku" : 1403978 }, ... "$db" : "test" } 以下示例输出包含在名为
items
的集合中,由具有游标 ID19234103609
的命令生成的getMore
操作的命令对象,在名为test
的数据库中。"command" : { "getMore" : NumberLong("19234103609"), "collection" : "items", "batchSize" : 10, ... "$db" : "test" }, 如果命令文档超过 1 千字节,则文档具有以下形式
"command" : { "$truncated": <string>, "comment": <string> } $truncated
字段包含文档的字符串摘要,不包括(如果存在)文档的comment
字段。如果摘要仍超过 1 千字节,则进一步截断,在字符串末尾用省略号 (...) 表示。如果操作传递了注释,则存在
comment
字段。注释可以附加到任何 数据库命令。
$currentOp.cursor
包含
idleCursor
和getmore
操作的游标信息的文档;即type
为idleCursor
或op
为getmore
。如果在
getmore
操作访问其游标信息之前报告,则cursor
字段不可用。$currentOp.cursor.lastAccessDate
上次使用游标的日期和时间。
如果游标正在使用中(即
op
是getmore
并且type
不是idleCursor
),则lastAccessDate
报告的是上次getmore
操作结束的时间,或者如果这是第一次getmore
,则报告游标创建的时间。
$currentOp.cursor.noCursorTimeout
表示游标在空闲时不会超时的标志;即如果游标设置了
noTimeout
选项。如果为真,游标在空闲时不会超时。
如果为假,游标在空闲时会超时。
$currentOp.cursor.tailable
指示游标是否为可尾随游标的标志。当客户端耗尽初始游标的结果后,可尾随游标仍然保持打开状态。
$currentOp.cursor.queryFramework
新功能在版本6.2.
一个字符串,指定用于处理操作所使用的 查询框架。
$currentOp.planSummary
一个字符串,指定游标是否使用集合扫描(
COLLSCAN
)或索引扫描(IXSCAN { ... }
)。当在
mongos
中使用localOps: 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.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.acquireWaitCount
操作因锁以冲突模式持有而必须等待
acquireCount
次锁获取的次数。acquireWaitCount
小于或等于acquireCount
。
$currentOp.lockStats.timeAcquiringMicros
操作获取锁时等待的总时间(微秒)。
timeAcquiringMicros
除以acquireWaitCount
可以得到特定锁模式的平均等待时间。
$currentOp.waitingForLock
返回布尔值。如果操作正在等待获取锁,则
waitingForLock
为true
,如果操作已经拥有所需的锁,则为false
。
$currentOp.msg
msg
提供了一条描述操作状态和进度的消息。在索引或 mapReduce 操作的情况下,该字段报告完成百分比。
$currentOp.waitingForFlowControl
一个布尔值,指示操作是否由于 流控制 而必须等待。
$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
每秒可采样的查询最大数量。
仅在运行
$currentOp
在mongos
时报告。该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。
新功能在版本7.0.
$currentOp.sampledReadsCount
样本读取查询的数量。
该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。
新功能在版本7.0.
$currentOp.sampledWritesCount
样本写入查询的数量。
该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。
新功能在版本7.0.
$currentOp.sampledReadsBytes
样本读取查询的大小,以字节为单位。
在副本集中,此信息在每一个
mongod
上报告。在分片集群中,此信息仅在带有
--shardsvr
的mongod
上报告。该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。
新功能在版本7.0.
$currentOp.sampledWritesBytes
样本写查询的大小,以字节为单位。
在副本集中,此信息在每一个
mongod
上报告。在分片集群中,此信息仅在带有
--shardsvr
的mongod
上报告。该字段仅在与查询采样相关的文档中出现。详细信息请参阅采样查询。
新功能在版本7.0.