$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
将选项文档作为其操作数:
选项 | 说明 |
---|---|
布尔值。
对于强制执行访问控制的独立运行和副本集,如果 对于强制执行访问控制的分片集群,需要 默认值为 | |
布尔值。如果设置为 默认值为 | |
布尔值。
默认值为 | |
布尔值。 如果设置为 例如,在具有三个分片的分片集群中,每个分片都是具有三个节点的副本集:
默认值为 版本 7.1 中的新增内容。 |
省略上述任何参数都会导致 $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.type
为op
,$currentOp.op
将提供有关特定操作的详细信息。
$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" } } ] ) 特定的提交协调操作(即
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
提交协调过程的当前步骤/状态。
步骤/阶段说明inactive
不是提交的主动部分。
writingParticipantList
写入属于该多分片事务的分片列表的本地记录。
waitingForVotes
等待参与者通过投票作出提交或终止响应。
writingDecision
写入协调器根据投票作出提交或终止决定的本地记录。
waitingForDecisionAck
等待参与者确认协调器提交或中止的决定。
deletingCoordinatorDoc
删除提交决策的本地记录。
仅适用于提交协调指标。
$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.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 文档包含user
名称和身份验证db
。一般来说,模拟的用户是__system
用户;例如"runBy" : [ { "user" : "__system", "db" : "local" } ]
$currentOp.opid
该操作的标识符。您可以将此值传递给
mongosh
中的db.killOp()
,以终止操作。警告
终止正在运行的操作时要格外小心。仅使用
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
使用“快照”读关注的分片集群事务中的操作获取的快照读取的时间戳。对于分片集群上的事务,数据的读关注
"snapshot"
是跨分片同步的;即其他读关注不保证该数据来自跨分片的同一快照视图。对于分片集群事务,仅当 localOps: true 时出现。
$currentOp.transaction.readTimestamp
此事务中的操作正在读取的快照时间戳
仅当操作是多文档事务的一部分时才出现。但是,如果出现以下情况,则不会返回字段
该事务位于分片集群上并使用“快照”读关注,且
$currentOp
使用localOps: true 运行。
$currentOp.transaction.timeOpenMicros
事务的持续时间(以微秒为单位)。
添加至
timeInactiveMicros
的timeActiveMicros
值应该等于timeOpenMicros
。只有当操作是多文档事务的一部分时才会出现。
$currentOp.transaction.timeActiveMicros
事务处于活动状态的总时长;即事务运行各种操作的总时长。
添加至
timeInactiveMicros
的timeActiveMicros
值应该等于timeOpenMicros
。只有当操作是多文档事务的一部分时才会出现。
$currentOp.transaction.timeInactiveMicros
事务处于非活动状态的总时长;即事务没有运行任何操作的总时长。
添加至
timeActiveMicros
的timeInactiveMicros
值应该等于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
包含与此操作相关的完整命令对象的文档。
例如,以下输出包含在
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
包含
idleCursor
和getmore
操作的游标信息的文档;即 其中type
是idleCursor
或op
是getmore
。如果在
getmore
访问其游标信息之前报告getmore
操作,则cursor
字段不可用。$currentOp.cursor.lastAccessDate
上次使用游标的日期和时间。
如果游标正在使用中(即
op
是getmore
,而type
不是idleCursor
),那么lastAccessDate
就会报告前一个getmore
的结束时间,如果这是第一个getmore
,则报告游标的创建时间。
$currentOp.cursor.noCursorTimeout
此标记指示游标空闲时未超时;即,如果游标设置了
noTimeout
选项。如果为 true,则游标在空闲时不会超时。
如果为 false,则游标在空闲时超时。
$currentOp.cursor.tailable
此标记指示游标是否为固定大小集合的可追加游标。在客户端用尽初始游标中的结果后,可追加游标将保持打开状态。
$currentOp.cursor.awaitData
此标记指示可追加游标在等待新数据时是否应暂时阻止游标上的
getMore
命令,而不是不返回任何数据。对于不可追加的游标,该值始终为 false。
$currentOp.cursor.planSummary
一个字符串,指定该游标使用集合扫描 (
COLLSCAN
) 还是索引扫描 (IXSCAN { ... }
)。IXSCAN
还包括所使用索引的规范文档。在
mongos
上运行并指定localOps: true
或在idleCursors
上报告时不可用。
$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
表示DDLcollection锁。
版本 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
在重新分片操作期间从捐赠分片复制到接收分片的字节数。开始新的重新分片操作时,该数字被设置为 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.startTime
查询采样开始的时间。
此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询。
7.0 版本中的新增功能。
$currentOp.samplesPerSecond
每秒待采样的最大查询数。
仅在
mongos
上运行$currentOp
时报告。此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询。
7.0 版本中的新增功能。
$currentOp.sampledReadsCount
已采样读取查询的总数。
此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询。
7.0 版本中的新增功能。
$currentOp.sampledWritesCount
采样写入查询的总数。
此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询。
7.0 版本中的新增功能。
$currentOp.sampledReadsBytes
采样读取查询的大小,以字节为单位。
在副本集上,每个
mongod
都会报告此问题。在分片集群上,这仅在启用了
--shardsvr
的mongod
上报告。此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询。
7.0 版本中的新增功能。
$currentOp.sampledWritesBytes
采样写入查询的大小,以字节为单位。
在副本集上,每个
mongod
都会报告此问题。在分片集群上,这仅在启用了
--shardsvr
的mongod
上报告。此字段仅显示在与查询采样相关的文档上。有关详细信息,请参阅采样查询。
7.0 版本中的新增功能。