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

currentOp

本页内容

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

已弃用自版本6.2.

从版本 6.2 及以后使用$currentOp 聚合阶段。

返回一个包含关于 mongod 实例正在进行的操作信息的 文档

使用 $currentOp 聚合阶段代替currentOp 命令及其 db.currentOp() 辅助方法。

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

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

注意

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

命令具有以下语法

db.adminCommand(
{
currentOp: 1
}
)

注意

从MongoDB 5.0开始,当使用mongosh.执行辅助方法db.currentOp()时,使用$currentOp聚合阶段

因此,在shell的5.0版本和mongosh中,db.currentOp()结果集不受先前遗留的mongo版本中16MB 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权限操作的访问权限。

用户可以在mongod实例上使用$ownOps来查看自己的操作,而无需inprog权限操作。

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
}
)

以下示例返回数据库db1上所有运行时间超过3秒的活动操作的信息

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>
}

以下是在副本集主节点上运行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 运行输出示例(字段可能因所报告的操作而异)。

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

操作当前队列的名称。

注意

如果存在 currentQueuenameingress,则操作正在等待入口准入。

currentOp.currentQueue.totalTimeQueuedMicros

操作在相应队列中累积的总时间,以微秒为单位。

currentOp.queues

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

currentOp.effectiveUsers

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

提示

另请参阅

currentOp.runBy

包含与操作关联的每个冒充 有效用户 的用户文档的数组。runBy 文档包含用户名和认证数据库。通常,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

事务持续时间,单位为微秒。

timeActiveMicros 的值加上 timeInactiveMicros 的值应等于 timeOpenMicros

仅当操作属于多文档事务时才存在。

currentOp.transaction.timeActiveMicros

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

timeActiveMicros 的值加上 timeInactiveMicros 的值应等于 timeOpenMicros

仅当操作属于多文档事务时才存在。

currentOp.transaction.timeInactiveMicros

事务处于非活动状态的总时间;即事务没有正在运行的操作。

timeInactiveMicros的值加上timeActiveMicros应等于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

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

  • "发送准备"。

  • "发送提交"。

  • "发送中止"。

  • "写入参与者列表"。

  • "写入决策"。

  • "删除协调器文档"。

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

currentOp.twoPhaseCommitCoordinator.startTime

action 的开始日期和时间。

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

currentOp.twoPhaseCommitCoordinator.numParticipants

参与此提交的碎片数量。

仅适用于提交协调指标。

currentOp.twoPhaseCommitCoordinator.state

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

步骤/阶段
描述
不活跃
不是提交的积极部分。
写入参与者列表
正在写入包含此多碎片事务中碎片列表的本地记录。
等待投票
等待参与者响应投票以提交或中止。
写入决策
根据投票写入协调器提交或中止决策的本地记录。
等待决策确认
等待参与者确认协调器的提交或中止决策。
删除协调器文档
删除提交决策的本地记录。

仅适用于提交协调指标。

另见currentOp.twoPhaseCommitCoordinator.stepDurations.

currentOp.twoPhaseCommitCoordinator.commitStartTime

提交开始的日期和时间。

仅适用于提交协调指标。

currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailover

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

如果hasRecoveredFromFailover为真,则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 为真,则 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.opid

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

警告

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

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

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

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

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

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

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

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

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

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

currentOp.planSummary

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

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

currentOp.prepareReadConflicts

当前操作在准备提交或中止包含写入操作的事务时需要等待的次数。

在等待期间,当前操作继续持有任何必要的锁和存储引擎资源。

currentOp.writeConflicts

当前操作与其他同一文档上的写入操作冲突的次数。

currentOp.cursor

包含用于 getmore 操作的光标信息的文档;即当 opgetmore 时。

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

currentOp.cursor.cursorId

游标的ID。

currentOp.cursor.createdDate

游标创建的日期和时间。

currentOp.cursor.lastAccessDate

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

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

currentOp.cursor.operationUsingCursorId

游标使用的操作 opid

仅当游标不为空闲时存在。

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.admissionPriority

仅用于内部。该值表示操作在尝试获取存储引擎操作票据时的优先级。

可能的值有:"low"、"normal"和"immediate"。只有值为"low"的操作会被报告。

示例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

已应用更新的数量。

仅在resharding操作进行时,在接收分片上存在。

版本6.1.

currentOp.remainingOperationTimeEstimatedSecs

remainingOperationTimeEstimatedSecs:当前resharding操作剩余时间的估计值(以秒为单位)。当一个新的resharding操作开始时,返回值为-1

  • MongoDB 5.0开始,但在MongoDB 7.0之前,remainingOperationTimeEstimatedSecs仅在resharding操作期间在接收分片上可用。

  • MongoDB 7.0,remainingOperationTimeEstimatedSecs在resharding操作期间也在协调器上可用。

resharding操作按顺序执行这些阶段

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

  2. 追赶阶段将任何挂起的写操作应用到resharding集合中。

remainingOperationTimeEstimatedSecs设置为悲观时间估计

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

  • 实际上,如果只有少量挂起的写操作,实际的追赶阶段时间相对较短。

版本5.0.

currentOp.allShardsLowestRemainingOperationTimeEstimatedSecs

在整个分片上计算,剩余时间的最低估计。

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

版本6.1.

currentOp.allShardsHighestRemainingOperationTimeEstimatedSecs

在整个分片上计算,剩余时间的最高估计。

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

版本6.1.

currentOp.approxDocumentsToCopy

在重新分片操作期间,从捐赠分片复制到接收分片的大约文档数量。此数字是在重新分片操作开始时设置的估计值,设置后不会改变。当新的重新分片操作开始时,数字设置为0。如果重新分片后的数据分布不完美均匀,则可能发生$currentOp.documentsCopied$currentOp.bytesCopied分别超过$currentOp.approxDocumentsToCopy$currentOp.approxBytesToCopy

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

currentOp.documentsCopied

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

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

currentOp.approxBytesToCopy

resharding操作期间从捐赠分片复制到接收分片的字节数的近似值。这是一个在resharding操作开始时设置的估算值,并在设置后不会改变。当一个新的resharding操作开始时,该数字设置为0。如果resharding操作后的数据分布不是完全均匀的,则$currentOp.documentsCopied$currentOp.bytesCopied可能会分别超过$currentOp.approxDocumentsToCopy$currentOp.approxBytesToCopy

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

currentOp.bytesCopied

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

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

currentOp.countWritesToStashCollections

写入到stash collections的数量。

仅在resharding操作进行时,在接收分片上存在。

版本6.1.

currentOp.countWritesDuringCriticalSection

在捐赠者的关键部分尝试写入的数量。

仅在重新分片操作进行时,捐赠分片上存在。

版本6.1.

currentOp.countReadsDuringCriticalSection

在捐赠者的关键部分尝试读取的数量。

仅在重新分片操作进行时,捐赠分片上存在。

版本6.1.

currentOp.deletesApplied

应用于临时重分片集合的删除操作数量。每个涉及删除的操作日志条目都会使计数器增加1。

仅在resharding操作进行时,在接收分片上存在。

版本6.1.

currentOp.insertsApplied

应用于临时重分片集合的插入操作数量。每个涉及插入的操作日志条目都会使计数器增加1。

仅在resharding操作进行时,在接收分片上存在。

版本6.1.

currentOp.totalCopyTimeElapsedSecs

当前重分片操作中,从捐赠分片到接收分片进行数据复制所花费的总时间(以秒为单位)。当新的重分片操作开始时,时间设置为0。

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

从MongoDB 6.1版本开始,此指标也适用于重新分片过程中的协调器。

currentOp.oplogEntriesFetched

当前oplog中获取的条目数量,用于当前重分片操作。新重分片操作开始时,该数字设置为0。

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

currentOp.oplogEntriesApplied

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

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

currentOp.totalApplyTimeElapsedSecs

当前resharding操作apply步骤的总耗时,单位为秒。在apply步骤中,接收到的分片将resharding操作的oplog条目应用到它们的数据上,以根据捐赠分片的新写入来修改数据。当新的resharding操作开始时,时间设置为0。

仅在resharding操作进行时,在接收分片上存在。

版本5.0.

从MongoDB 6.1版本开始,此指标也适用于重新分片过程中的协调器。

currentOp.countWritesDuringCriticalSection

当前resharding操作关键部分中执行的写入次数。关键部分阻止对正在resharding的集合的新写入。当新的resharding操作开始时,该数值设置为0。

仅在重新分片操作进行时,捐赠分片上存在。

版本5.0.

currentOp.totalCriticalSectionTimeElapsedSecs

当前resharding操作关键部分的总耗时,单位为秒。关键部分阻止对正在resharding的集合的新写入。当新的resharding操作开始时,时间设置为0。

仅在重新分片操作进行时,捐赠分片上存在。

版本5.0.

从MongoDB 6.1版本开始,此指标也适用于重新分片过程中的协调器。

currentOp.donorState

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

仅在重新分片操作进行时,捐赠分片上存在。

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

版本5.0.

currentOp.recipientState

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

仅在重新分片操作进行时,捐赠分片上存在。

状态
描述
未使用
重分片操作即将开始或从主节点故障转移中恢复。
等待获取时间戳
接收分片正在等待捐赠分片准备好捐赠数据。
创建集合
接收分片正在创建新的分片集合。
克隆
接收分片正在从捐赠分片接收数据。
应用
接收分片正在将oplog条目应用于其数据的副本,以根据来自捐赠分片的新传入写入进行修改。
错误
重分片操作期间发生错误。
严格一致性
接收分片将所有数据更改存储在一个临时集合中。
完成
重新分片操作已完成。

版本5.0.

currentOp.coordinatorState

当前重新分片操作的重新分片协调器状态。重新分片协调器是运行在配置服务器主节点上的操作。当一个新的重新分片操作开始时,状态设置为未使用

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

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

重新分片协调器

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

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

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

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

克隆
重新分片协调器通知捐赠分片向接收分片捐赠数据。协调器等待所有接收者完成从捐赠者克隆数据。
应用
重新分片协调器通知接收分片根据捐赠者的新传入写入修改其数据副本。协调器等待所有接收者完成应用oplog条目。
阻止写入
重新分片协调器通知捐赠分片防止对新正在重新分片的集合进行新的写入操作。协调器然后等待所有接收者都有所有数据更改。
正在中止
在重新分片操作期间发生了不可恢复的错误,或者执行了abortReshardCollection命令(或运行了sh.abortReshardCollection()方法)。
提交中
重新分片协调器删除了临时重新分片集合的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