定義
$currentOpトランザクションの一部としてロックを保持している非アクティブなセッションおよびアクティブな操作および休止中の操作に関する情報を含むドキュメントのストリームを返します。 ステージでは、各操作またはセッションのドキュメントが返されます。
$currentOpdb.aggregate()を実行するには、adminデータベースで ヘルパーを使用します。$currentOp集計ステージは、currentOpコマンドとそのmongoshヘルパー メソッドdb.currentOp()よりも優先されます。currentOpコマンドとdb.currentOp()ヘルパー メソッドは単一ドキュメントで結果を返すため、currentOp結果セットの合計サイズはドキュメントの最大16 MB BSON サイズ制限の対象となります。$currentOpステージはドキュメントのストリームに対するカーソルを返します。各ドキュメントは 1 つの操作を報告します。 各操作ドキュメントは16 MB BSON の制限の対象となりますが、currentOpコマンドとは異なり、結果セットの全体的なサイズに制限はありません。$currentOpを使用すると、ドキュメントがパイプラインを通過するときに結果の任意の変換を実行することもできます。
構文
バージョン 4.2 で変更。
{ $currentOp: { allUsers: <boolean>, idleConnections: <boolean>, idleCursors: <boolean>, idleSessions: <boolean>, localOps: <boolean> } }
$currentOp は、オプションドキュメントをオペランドとして受け取ります。
オプション | 説明 |
|---|---|
ブール値。
アクセス制御を強制するスタンドアロンとレプリカセットでは、 アクセス制御を強制するシャーディングされたクラスターの場合、 デフォルトは | |
ブール値。 デフォルトは | |
ブール値。
デフォルトは | |
ブール値。 で実行中集計に対して
デフォルトは | |
ブール値。 コールスタック情報が
デフォルトは バージョン 4.2.2 の新機能。 |
上記のパラメーターのいずれかを省略すると、$currentOp はそのパラメーターのデフォルト値を使用します。 すべてのパラメータのデフォルト値を使用するには、次に示すように空のドキュメントを指定します。
{ $currentOp: { } }
制約
パイプライン
$currentOpは、パイプラインの最初のステージである必要があります。$currentOpで開始されるパイプラインは、adminデータベースでのみ実行できます。
アクセス制御
アクセス制御を強制するスタンドアロンとレプリカセットで、 allUsers:
inprog$currentOptrue の 場合、 を実行するには 特権が必要です。アクセス制御を強制するシャーディングされたクラスターの場合、 を実行するには
inprog$currentOp特権が必要です。
トランザクション
例
非アクティブなセッション
この例では、トランザクションの一部としてロックを保持している 非アクティブなセッション に関する情報を返すために、次のステージを作成します。
最初の ステージでは、すべてのアクティブな操作と、トランザクションの一部としてロックを保持している 非アクティブなセッション のドキュメントが返されます。
第 2 ステージでは、トランザクションの一部としてロックを保持している 非アクティブなセッション に関連するドキュメントがフィルタリングされます。
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" } } ] )
Tip
シャーディングされたクラスター上のトランザクションの場合、トランザクションの複合ビューについては、前の例にlocalOps:trueを含めます。
どちらの操作も、次の形式のドキュメントを返します。
レプリカセットの一部であるmongodで実行した場合:
{ "type" : "idleSession", "host" : "example.mongodb.com:27017", "desc" : "inactive transaction", "client" : "198.51.100.1:50428", "connectionId" : Long(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" : Long(4), "autocommit" : false, "readConcern" : { "level" : "snapshot", "afterClusterTime" : Timestamp(1563892246, 1) } }, "readTimestamp" : Timestamp(0, 0), "startWallClockTime" : "2019-07-23T10:30:49.461-04:00", "timeOpenMicros" : Long(1913590), "timeActiveMicros" : Long(55), "timeInactiveMicros" : Long(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" : Long(5) } }, "Global" : { "acquireCount" : { "r" : Long(3), "w" : Long(1) } }, "Database" : { "acquireCount" : { "r" : Long(2), "w" : Long(1) } }, "Collection" : { "acquireCount" : { "w" : Long(1) } }, "Mutex" : { "acquireCount" : { "r" : Long(3) } }, "oplog" : { "acquireCount" : { "r" : Long(2) } } }, "waitingForFlowControl" : false, "flowControlStats" : {}, }
$currentOp を localOps:true とともに実行すると、個々のシャードに関する情報ではなく、その 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" : Long(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" : Long(2), "autocommit" : false, "readConcern" : { "level" : "snapshot", "afterClusterTime" : Timestamp(1571869019, 2) } }, "globalReadTimestamp" : Timestamp(1571869019, 2), "startWallClockTime" : "2019-10-23T18:16:59.341-04:00", "timeOpenMicros" : Long(169244639), "timeActiveMicros" : Long(535), "timeInactiveMicros" : Long(169244104), "numParticipants" : 2, "participants" : [ { "name" : "shardB", "coordinator" : true, "readOnly" : false }, { "name" : "shardA", "coordinator" : false, "readOnly" : false } ], "numReadOnlyParticipants" : 0, "numNonReadOnlyParticipants" : 2 } }
で localOps:true mongosなしで実行した場合、トランザクション情報はシャードあたり になります。
localOps:truemongos なしの で実行した場合、トランザクション情報はシャードあたり になります。
{ "shard" : "shardB", "type" : "idleSession", "host" : "shardB.mongodb.com:27018", "desc" : "inactive transaction", "client_s" : "198.51.100.1:53961", "connectionId" : Long(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" : Long(1), "autocommit" : false, "readConcern" : { "level" : "snapshot" } }, "readTimestamp" : Timestamp(0, 0), "startWallClockTime" : "2019-10-21T18:31:12.192-04:00", "timeOpenMicros" : Long(24137008), "timeActiveMicros" : Long(52), "timeInactiveMicros" : Long(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" : Long(3) } }, "Global" : { "acquireCount" : { "r" : Long(1), "w" : Long(1) } }, "Database" : { "acquireCount" : { "r" : Long(1), "w" : Long(1) } }, "Collection" : { "acquireCount" : { "r" : Long(1), "w" : Long(1) } }, "Mutex" : { "acquireCount" : { "r" : Long(6) } } } } { "shard" : "shardA", "type" : "idleSession", ... }
MongoDB Node.jsドライバーを使用して $currentOp ステージを集計パイプラインに追加するには、パイプラインオブジェクトで $currentOp 演算子を使用します。
非アクティブなセッション
この例では、トランザクションの一部としてロックを保持している 非アクティブなセッション に関する情報を返す次のパイプラインステージを作成します。
最初の ステージでは、トランザクションの一部としてロックを保持しているすべてのアクティブな操作と非アクティブなセッションのドキュメントが返されます。
第 2 ステージでは、トランザクションの一部としてロックを保持している 非アクティブなセッション に関連するドキュメントがフィルタリングされます。
次に、この例では次の集計パイプラインが実行されます。
const db = client.db("admin"); const pipeline = [ { $currentOp: { allUsers: true, idleSessions: true } }, { $match: { active: false, transaction: { $exists: true } } } ]; const cursor = db.aggregate(pipeline); return cursor;
$currentOp.type を使用して、$match ステージで同等のフィルターを指定できます。
const db = client.db("admin"); const pipeline = [ { $currentOp: { allUsers: true, idleSessions: true } }, { $match: { type: "idleSession" } } ]; const cursor = db.aggregate(pipeline); return cursor;
サンプル クエリ
この例では、クエリのサンプリングに関する情報を返すために、次のステージを作成しています。
最初のステージでは、すべてのアクティブな操作のドキュメントが返されます。
第 2 ステージは、クエリアナライザに関連するドキュメントをフィルタリングします。
const db = client.db("admin"); const pipeline = [ { $currentOp: { allUsers: true, localOps: true } }, { $match: { desc: "query analyzer" } } ]; const cursor = db.aggregate(pipeline); return cursor;
出力フィールド
各出力ドキュメントには、操作に関連する次のフィールドのサブセットが含まれる場合があります。
$currentOp.typeバージョン 4.2の新機能
操作の種類。 値は次のいずれかです。
opidleSessionidleCursor
$currentOp.typeがopの場合、$currentOp.opは特定の操作の詳細を提供します。
$currentOp.client操作の発信元となるクライアント接続の IP アドレス(またはホスト名)とエフェメラル ポート。
マルチドキュメントトランザクションの場合、
$currentOp.clientはトランザクション内で操作を実行するための最新のクライアントに関する情報を保存します。スタンドアロンとレプリカセットのみ
$currentOp.client_s操作の発信元となる
mongosの IP アドレス(またはホスト名)とエフェメラル ポート。シャーディングされたクラスターのみ
$currentOp.clientMetadataクライアントに関する追加情報。
マルチドキュメントトランザクションの場合、
$currentOp.clientはトランザクション内で操作を実行するための最新のクライアントに関する情報を保存します。
$currentOp.appName操作を実行したクライアント・アプリケーションの識別子。
appName接続stringオプションを使用して、appNameフィールドにカスタム値を設定します。
$currentOp.active操作が開始されたかどうかを指定するブール値。 値は、操作が開始された場合は
trueで、アイドル接続、非アクティブなセッション、現在アイドル状態の内部スレッドなど、操作がアイドル状態の場合はfalseです。 操作が別の操作に中断された場合でも、操作をアクティブにすることができます。
$currentOp.twoPhaseCommitCoordinator次のいずれかに関する情報
書込み (write) 操作が複数のシャードにまたがるトランザクションのコミット調整メトリクス。
コミット調整はシャードによって処理され、
$currentOp(mongosまたはシャード ノードで実行)は、そのシャードによって現在調整されているトランザクションについてのみシャードの調整情報を返します。
次の例では、コミット調整メトリクスのみをフィルタリングします。
db.getSiblingDB("admin").aggregate( [ { $currentOp: { allUsers: true, idleSessions: true } }, { $match: { desc: "transaction coordinator" } } ] ) 特定のコミット調整操作(
typeはopであり、descは"TransactionCoordinator"です)。注意
idleSessions: false で実行した場合、
$currentOpは$currentOp.twoPhaseCommitCoordinatorに 情報を返しません。inactivestateアクセス制御が有効になっており、 allUsers: falseの場合、
$currentOpは$currentOp.twoPhaseCommitCoordinator情報を返しません。
$currentOp.twoPhaseCommitCoordinator.lsidマルチシャード トランザクションのセッション識別子。
$currentOp.twoPhaseCommitCoordinator.txnNumberマルチシャード トランザクションのトランザクション番号。
$currentOp.twoPhaseCommitCoordinator.actionトランザクションの調整役によって生成される特定のコミット調整操作は、以下のとおりです。
"sendingPrepare""sendingCommit""sendingAbort""writingParticipantList""writingDecision""deletingCoordinatorDoc"
$currentOp.twoPhaseCommitCoordinator.stateコミット調整プロセスの現在のステップまたは状態。
ステップ/ステージ説明inactiveコミットのアクティブな一部ではない。
writingParticipantListこのマルチシャード トランザクションの一部であるシャードのリストをローカル レコードで書込み (write) ます。
waitingForVotes参加者がコミットまたは中止への投票で応答するまで待機します。
writingDecision投票に基づいてコミットまたは中止するかどうかのコーディネーターの決定をローカル レコードで書き込みます。
waitingForDecisionAckコーディネーターのコミットまたは中止の決定を確認するまで、参加者が待機します。
deletingCoordinatorDocコミット決定のローカル レコードを削除します。
$currentOp.twoPhaseCommitCoordinator.stepDurationsも参照してください。
$currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailoverコミットを調整しているシャードで フェイルオーバー によりコミット調整が再開されたかどうかを示すブール値。
hasRecoveredFromFailoverが true の場合、$currentOp.twoPhaseCommitCoordinator.stepDurationsで指定される時間がすべてのステップで正確にならない可能性があります。
$currentOp.twoPhaseCommitCoordinator.stepDurationsアクティブなプロセスの完了または進行中の
steps/stateの期間(マイクロ秒単位)と累積合計期間を含むドキュメント。例:"stepDurations" : { "writingParticipantListMicros" : Long(17801), "totalCommitDurationMicros" : Long(42488463), "waitingForVotesMicros" : Long(30378502), "writingDecisionMicros" : Long(15015), "waitingForDecisionAcksMicros" : Long(12077145), "deletingCoordinatorDocMicros" : Long(6009) }, $currentOp.twoPhaseCommitCoordinator.hasRecoveredFromFailoverが true の場合、stepDurationsで指定される時間がすべてのステップで正確にならない可能性があります。inactive状態のコーディネーターの場合、ドキュメントは空です。"stepDurations" : { } 「
$currentOp.twoPhaseCommitCoordinator.state」を参照してください。
$currentOp.twoPhaseCommitCoordinator.decisionコミットまたは中止の決定を含むドキュメント。例:
コミットの決定を行うには:
"decision" : { "decision" : "commit", "commitTimestamp" : Timestamp(1572034669, 3) } 中止の決定を行うには:
"decision" : { "decision" : "abort", "abortStatus" : { "code" : 282, "codeName" : "TransactionCoordinatorReachedAbortDecision", "errmsg" : "Transaction exceeded deadline" } }
$currentOp.effectiveUsers操作に関連付けられた各ユーザーのドキュメントを含む配列。 各ユーザー ドキュメントには、
user名と認証dbが含まれています。バージョン 4.2の新機能
$currentOp.runBy操作のために
effectiveUser(s)を引き受けている各ユーザーのドキュメントを含む配列。 runBy ドキュメントにはuser名と認証dbが含まれています。 一般的に、権限を付与するユーザーは__systemユーザーです。例:"runBy" : [ { "user" : "__system", "db" : "local" } ] バージョン 4.2の新機能
$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.autocommitトランザクションでオートコミットがオンになっているかどうかを示すブール値のフラグ。
操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。
$currentOp.transaction.parameters.readConcernトランザクションの読み取り保証( read concern )です。
マルチドキュメントトランザクションは、読み取り保証(read concern)
"snapshot"、"local"、"majority"をサポートします。操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。
$currentOp.transaction.globalReadTimestamp「スナップショット」読み取り保証 (read concern)を使用するシャーディングされたトランザクション内の操作によって読み取られたスナップショットのタイムスタンプ。 シャーディングされたクラスター上のトランザクションの場合、データの読み取り保証(read concern)
"snapshot"はシャード間で 同期されます 。つまり、その他の読み取り保証 (read concern) では、シャード全体でデータが同じスナップショット ビューから取得されることは保証されません。シャーディングされたクラスター トランザクションに対してlocalOps: trueで実行した場合にのみ存在します。
$currentOp.transaction.readTimestampこのトランザクションの操作によって読み取られるスナップショットのタイムスタンプ
操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。 ただし、次の場合には、 フィールドは返されません。
トランザクションがシャーディングされたクラスターにあり、 「スナップショット」読み取り保証(read concern ) を使用している
代わりに、
$currentOp.transaction.globalReadTimestampが返されます。
$currentOp.transaction.startWallClockTimeトランザクションが開始された日時(タイムゾーン)。
操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。
$currentOp.transaction.timeOpenMicrosトランザクションの期間(マイクロ秒単位)。
timeActiveMicrosに追加される の値はtimeInactiveMicrostimeOpenMicrosと等しくなっている必要があります。操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。
$currentOp.transaction.timeActiveMicrosトランザクションがアクティブになっている合計時間。つまり、トランザクションで操作が実行されていた場合を指します。
timeActiveMicrosに追加される の値はtimeInactiveMicrostimeOpenMicrosと等しくなっている必要があります。操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。
$currentOp.transaction.timeInactiveMicrosトランザクションが非アクティブであった合計時間。トランザクションで実行中の操作がない場合。
timeInactiveMicrosに追加される の値はtimeActiveMicrostimeOpenMicrosと等しくなっている必要があります。操作がマルチドキュメントトランザクションの一部である場合にのみ存在します。
$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特定の操作タイプを識別する string。
$currentOp.typeがopの場合にのみ存在します。可能な値は次のとおりです。
"none""update""insert""query""command""getmore""remove""killcursors"
"command"操作には、 、createIndexesaggregate、 などのほとんどの コマンドfindAndModifyが含まれます"query"操作には、find操作と OP_QUERY 操作が含まれます。
$currentOp.ns操作の対象となる名前空間。 名前空間は、データベース名とコレクション名をドットで連結したもの(
.)で構成されています。つまり、"<database>.<collection>"です。
$currentOp.commandこの操作に関連付けられた完全なコマンドオブジェクトを含むドキュメント。
たとえば、次の出力には、
testという名前のデータベース内のitemsという名前のコレクションに対するfind操作のコマンド オブジェクトが含まれています。"command" : { "find" : "items", "filter" : { "sku" : 1403978 }, ... "$db" : "test" } 次の出力例には、
testという名前のデータベース内のitemsという名前のコレクションで、カーソル ID19234103609を持つ コマンドによって生成されたgetMore操作のコマンド オブジェクトが含まれています。"command" : { "getMore" : Long("19234103609"), "collection" : "items", "batchSize" : 10, ... "$db" : "test" }, コマンド ドキュメントが 1 キロバイトを超える場合、ドキュメントの形式は次のようになります。
"command" : { "$truncated": <string>, "comment": <string> } $truncatedフィールドには、ドキュメントのcommentフィールド(存在する場合)を除いたドキュメントの string のサマリーが含まれます。 サマリーが依然として 1 キロバイトを超える場合は、さらに切り捨てられ、string の末尾に省略記号 (...) が表示されます。操作にコメントが渡された場合、
commentフィールドが存在します。任意のデータベースコマンドにコメントを添付できます。
$currentOp.cursorバージョン 4.2の新機能
idleCursor操作とgetmore操作のカーソル情報を含むドキュメントすなわち wheretypeisidleCursororopisgetmore.getmoreがカーソル情報にアクセスする前にgetmore操作を報告する場合、cursorフィールドは使用できません。$currentOp.cursor.lastAccessDateバージョン 4.2の新機能
カーソルが最後に使用された日時。
カーソルがアクティブに使用されている場合(つまり
opはgetmoreであり、typeはidleCursorではありません)、lastAccessDateは前回のgetmoreが終了した時間、または最初のgetmoreである場合はカーソルが作成された時間を報告します。
$currentOp.cursor.noCursorTimeoutバージョン 4.2の新機能
アイドル状態の場合、カーソルがタイムアウトしないことを示すフラグ。 (つまり、カーソルに
noTimeoutオプションが設定されている場合)。true の場合、アイドル状態のときにカーソルはタイムアウトしません。
false の場合、アイドル状態のときにカーソルはタイムアウトになります。
$currentOp.cursor.tailableバージョン 4.2の新機能
カーソルがCappedコレクションの 追尾可能 (tailable) カーソル かどうかを示すフラグ。 クライアントが初期カーソルの結果を使い果たした後も、追尾可能 (tailable) カーソルはオープンしたままになります。
$currentOp.cursor.awaitDataバージョン 4.2の新機能
追尾可能 (tailable) カーソルが、データを返さずに新しいデータを待機している間に、カーソル上の
getMoreコマンドを一時的にブロックするかどうかを示すフラグ。追尾可能 (tailable) ではないカーソルの場合、値は常に false です。
$currentOp.cursor.originatingCommandバージョン 4.2の新機能
originatingCommandフィールドには完全なコマンドオブジェクト(例:findまたはaggregate)が必要です。注意
MongoDB バージョン 4.2 以降では、新しい
cursorフィールドにネストされたフィールドとしてoriginatingCommandフィールドが返されるようになりました。 以前のバージョンでは、originatingCommandは関連付けられた"getmore"ドキュメントの最上位フィールドでした。
$currentOp.cursor.planSummaryバージョン 4.2の新機能
カーソルがコレクションスキャン(
COLLSCAN)を使用するか、インデックススキャン(IXSCAN { ... })を使用するかを指定する string 。IXSCANには、使用されるインデックスの仕様ドキュメントも含まれます。mongosでlocalOps: trueを使用して実行している場合、またはidleCursorsでレポート作成している場合は使用できません。
$currentOp.planSummaryカーソルがコレクションスキャン(
COLLSCAN)を使用するか、インデックススキャン(IXSCAN { ... })を使用するかを指定する string 。mongosでlocalOps: trueを使用して実行している場合は使用できません。
$currentOp.prepareReadConflicts現在の操作が、コミットまたは中止するための書込み (write) で準備されたトランザクションを待機しなければならなかった回数。
待機している間も、操作は必要なロックとストレージ エンジン リソースを保持し続けます。
バージョン 4.2の新機能
$currentOp.numYieldsnumYieldsは、他の操作を完了させるために操作が中断した回数を報告するカウンターです。通常、MongoDB がまだ完全にメモリに読み込んでいないデータにアクセスする必要がある場合、操作は中断します。 これにより、MongoDB が中断された操作のデータを読み込んでいる間に、メモリにデータがある他の操作を迅速に完了できます。
$currentOp.dataThroughputLastSecond過去 1 秒に
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.dataThroughputAveragevalidate操作によって処理された平均データ量(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.waitingForLatchwaitingForLatchドキュメントは、操作が内部のロック プリミティブ(ラッチ)、または内部条件が満たされるのを待機している場合にのみ使用できます。たとえば、
"waitingForLatch" : { "timestamp" : ISODate("2020-03-19T23:25:58.412Z"), "captureName" : "FutureResolution", "backtrace" : [ ] // Only if backtrace: true }, 出力フィールド説明タイムスタンプ
操作が待機を開始した日時。
acceptName
操作が現在ブロックされているセクションの内部名。
backtrace
コールスタック(使用可能な場合)。 フィールドはバックトレース: true の場合にのみ含まれます。
$currentOp.lockslocksドキュメントは、操作が現在保持しているロックのタイプとモードを報告します。 使用可能なロック タイプは、以下のとおりです。ロック タイプ説明ParallelBatchWriterMode並列バッチ書込みモードのロックを表します。
以前のバージョンでは、PBWM 情報は
Globalロック情報の一部として報告されていました。ReplicationStateTransitionレプリカセットの状態遷移に対して取得されたロックを表します。
Globalグローバル ロックを表します。
Databaseデータベース ロックを表します。
Collectionコレクション ロックを表します。
Mutexミューテックスを表します。
Metadataメタデータ ロックを表します。
oplogoplog のロックを表します。
使用可能なモードは次のとおりです。
ロックモード説明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.msgmsgには、操作のステータスと進行状況を説明するメッセージが表示されます。 インデックス操作または mapReduce 操作の場合、 フィールドには完了率が報告されます。
$currentOp.progressmapReduce またはインデックス操作の進行状況を報告します。
progressフィールドは、msgフィールドの完了パーセンテージに対応します。progressは、次の情報を指定します。
$currentOp.waitingForFlowControlフロー制御のために操作が待機する必要があった場合は、ブール値。
バージョン 4.2の新機能
$currentOp.totalOperationTimeElapsed現在のリシャーディング操作の合計経過時間(秒単位)。 新たにリシャーディング操作を開始すると、時間は 0 に設定されます。
リシャーディング操作 が行われている場合にのみ存在します。
バージョン 5.0 で追加
$currentOp.remainingOperationTimeEstimatedThe estimated time remaining in seconds for the current resharding operation. 新たにリシャーディング操作を開始すると、時間は -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現在のリシャーディング操作における適用ステップの合計経過時間(秒単位)です。 適用ステップでは、受信者シャードは、ドナー シャードから新たに受信した書込み (write) に基づいてデータを変更するために、 oplogエントリを適用します。 新たにリシャーディング操作を開始すると、時間は 0 に設定されます。
リシャーディング操作 が行われているときにのみ 受信者シャード に存在します。
バージョン 5.0 で追加
$currentOp.countWritesDuringCriticalSection現在のリシャーディング操作でクリティカル セクションにおいて実行された書込み (write) の数。 クリティカル セクションは、リシャーディング中のコレクションへの新規の受信書込み (write) を防止します。 新たにリシャーディング操作を開始すると、数値は 0 に設定されます。
リシャーディング操作が行われているときにのみ存在します。
バージョン 5.0 で追加
$currentOp.totalCriticalSectionTimeElapsed現在のリシャーディング操作におけるクリティカル セクションの合計経過時間(秒単位)。 クリティカル セクションは、リシャーディング中のコレクションへの新規の受信書込み (write) を防止します。 新たにリシャーディング操作を開始すると、時間は 0 に設定されます。
リシャーディング操作が行われているときにのみ存在します。
バージョン 5.0 で追加
$currentOp.donorStateリシャーディング操作におけるドナー シャードの現在の状態です。 新たにリシャーディング操作を開始すると、状態は
unusedに設定されます。リシャーディング操作が行われているときにのみ存在します。
状態説明unusedリシャーディング操作を開始またはプライマリ フェイルオーバーから回復しようとしているとき
preparing-to-donateドナー シャードは、受信者シャードにデータを提供する準備をしています。
donating-initial-dataドナー シャードは受信者シャードにデータを提供します。
donating-oplog-entriesドナー シャードは、受信者シャードに oplog エントリを提供しています。
preparing-to-block-writesドナー シャードは、リシャーディング中のコレクションへの新規の受信書込み (write) 操作を阻止しようとしています。
errorリシャーディング操作中にエラーが発生しました
blocking-writesドナー シャードは新規の受信書込み (write) 操作を防ぎ、新規の受信書込み (write) が禁止されていることをすべての受信者シャードに通知しました。
doneドナー シャードは古いシャーディングされたコレクションを削除し、リシャーディング操作は完了しました。
バージョン 5.0 で追加
$currentOp.recipientStateリシャーディング操作 における受信者シャードの現在の状態です。 新たにリシャーディング操作を開始すると、状態は
unusedに設定されます。リシャーディング操作が行われているときにのみ存在します。
状態説明unusedリシャーディング操作を開始またはプライマリ フェイルオーバーから回復しようとしているとき
awaiting-fetch-timestamp受信シャードは、ドナー シャードがデータを提供する準備ができるのを待っています。
creating-collection受信者シャードは新しいシャーディングされたコレクションを作成しています。
cloning受信者シャードはドナー シャードからデータを受信しています。
applying受信者シャードは、ドナー シャードからの新規受信書込み (write) に基づいてデータのコピーを変更するために、oplog エントリを適用しています。
errorリシャーディング操作中にエラーが発生しました
strict-consistency受信者シャードでは、すべてのデータ変更は一時的なコレクションに保存されます。
doneリシャーディング操作が完了しました。
バージョン 5.0 で追加
$currentOp.coordinatorState現在のリシャーディング操作におけるリシャーディング コーディネーターの状態です。 リシャーディング コーディネーターは、 コンフィギュレーションサーバーのプライマリで実行される操作です。 新たにリシャーディング操作を開始すると、状態は
unusedに設定されます。調整コンフィギュレーションサーバー上にのみ存在します。
状態説明unusedリシャーディング操作を開始またはプライマリ フェイルオーバーから回復しようとしているとき
initializingリシャーディング コーディネーターは、コーディネーター ドキュメントを
config.reshardingOperationsに挿入し、元のコレクションのconfig.collectionsエントリにreshardingFieldsを追加しました。preparing-to-donateリシャーディング コーディネーター
- は一時的な に対する
config.collectionsエントリを作成しました - コレクションのリシャーディング。
- は一時的な に対する
- は以下に基づく範囲に対するエントリを
config.chunksに挿入しました - 新しいシャードキー。
- は以下に基づく範囲に対するエントリを
- は関連付けられているすべてのゾーンのエントリを
config.tagsに挿入しました - 新しいシャードキー。
- は関連付けられているすべてのゾーンのエントリを
コーディネーターは、参加シャードにリシャーディング操作を開始するように通知します。その後、コーディネーターはすべてのドナー シャードが
minFetchTimestampを選択し、提供の準備が整うまで待ちます。cloningリシャーディング コーディネーターは、受信者シャードにデータを提供するようドナー シャードに通知します。コーディネーターは、すべての受信者がドナーからのデータの複製を完了させるのを待機します。
applyingリシャーディング コーディネーターは、ドナー シャードから新たに受信した書込み (write) に基づいてデータのコピーを変更するよう、受信者シャードに通知します。コーディネーターは、すべての受信者が oplog エントリの適用を完了させるのを待機します。
blocking-writesリシャーディング コーディネーターは、コレクションへの新たな受信書込み (write) 操作がリシャーディングされないよう、ドナー シャードに通知します。その後、コーディネーターはすべての受信者がすべてのデータ変更を完了させるのを待機します。
abortingリシャーディング操作中に回復不能なエラーが発生したか、
abortReshardCollectionコマンド(またはsh.abortReshardCollection()メソッド)が実行されました。committingリシャーディング コーディネーターは、一時的なリシャーディングコレクションの
config.collectionsエントリを削除します。次に、コーディネーターはrecipientFieldsをソース コレクションのエントリに追加します。バージョン 5.0 で追加