説明
db.killOp(opid)操作 ID で指定された操作を終了します。操作とそれに対応する ID を見つけるには、
$currentOp、またはdb.currentOp()を参照してください。db.killOp()メソッドには次のパラメータがあります。Parameterタイプ説明op数値
操作 ID。
警告
実行中の操作は、細心の注意を払って終了します。 クライアントによって開始された操作を終了するには
db.killOp()のみを使用し、内部データベース操作は終了しません。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
MongoDB Atlas は、このメソッドの使用を、操作を実行した MongoDB ユーザーに制限しています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
シャーディングされたクラスター
読み取り操作の強制終了
db.killOp()メソッドはmongosで実行でき、クラスター内の複数のシャードで実行されているクエリ(読み取り操作)を強制終了できます。
たとえば、シャーディングされたクラスターでクエリ操作を強制終了するには、次のようにします。
クライアントがクエリを発行したのと同じ
mongosで、次のlocalOps: trueで集計パイプライン$currentOpを実行し、強制終了するクエリ操作の opid を見つけます。use admin db.aggregate( [ { $currentOp : { allUsers: true, localOps: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. // e.g. { op: "getmore", "command.collection": "someCollection" } ] ) 重要
この集計操作は、クライアントがクエリを発行したのと同じ
mongosで発行する必要があります。強制終了するクエリ操作が見つかったら、
mongos上の opid を指定してdb.killOp()を発行しますdb.killOp(<opid of the query to kill>)
Tip
$currentOp内のlocalOpsパラメータ。
または、操作を実行中のシャード ノードから読み取り操作を見つけて強制終了することもできます。MongoDB は、強制終了操作を他のシャードと mongos インスタンスに伝達します。
操作が実行中のシャードの 1 つで、強制終了するクエリ操作の opid を見つけます。
use admin db.aggregate( [ { $currentOp : { allUsers: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. // e.g. { op: "getmore", "command.collection": "someCollection" } ] ) 強制終了するクエリ操作が見つかったら、シャード ノード上の opid を指定して
db.killOp()を発行します。db.killOp(<opid of the query to kill>) MongoDB は、強制終了操作を他のシャードと
mongosインスタンスに伝達します。
書き込み操作の強制終了
- セッション内
MongoDB ドライバーは、確認されていない書き込みを除くすべての操作をサーバー セッションに関連付けます。
書き込み操作がセッションに関連付けられている場合、
mongosのkillSessionsコマンドを使用して、シャード全体の書き込み操作を強制終了できます。mongosで集計パイプライン$currentOpを実行して、lsid(論理セッション ID)を見つけます。use admin db.aggregate( [ { $currentOp : { allUsers: true, localOps: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. // e.g. { "op" : "update", "ns": "mydb.someCollection" } ] ) 返された
lsid情報を使用して、mongosでkillSessionsコマンドを発行し、シャードに対する操作を強制終了します。db.adminCommand( { killSessions: [ { "id" : UUID("80e48c5a-f7fb-4541-8ac0-9e3a1ed224a4"), "uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=") } ] } )
- セッションなし
書き込み操作がセッションに関連付けられていない場合は、書き込みに関連するすべてのシャードで操作を見つけて強制終了する必要があります。
mongosから、集計パイプライン$currentOpを実行して、シャード上のクエリ操作の opid を見つけます。use admin db.aggregate( [ { $currentOp : { allUsers: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. ] ) mongosで実行すると、$currentOpは opids を"<shardName>:<opid on that shard>"の形式で返します。例:{ "shard" : "shardB", .. "opid" : "shardB:79214", ... }, { "shard" : "shardA", .. "opid" : "shardA:100913", ... }, opid 情報を使用して、 で
db.killOp()mongosを発行して、シャードでの操作を強制終了します。db.killOp("shardB:79014"); db.killOp("shardA:100813");
アクセス制御
authorization で実行されているシステムでは、ユーザー自身のものでない操作を強制終了するには、ユーザーに killop 特権アクションを含むアクセス権が必要です。
mongod インスタンスでは、ユーザーは killop 特権アクションがなくても自分の操作を強制終了できます。