On this page本页内容
db.killOp(opid)
Terminates an operation as specified by the operation ID. 终止操作ID指定的操作。To find operations and their corresponding IDs, see 要查找操作及其相应的ID,请参阅$currentOp
or db.currentOp()
.$currentOp
或db.currentOp()
。
The db.killOp()
method has the following parameter:db.killOp()
方法具有以下参数:
op | number |
Terminate running operations with extreme caution. 终止运行操作时要格外小心。Only use 仅使用db.killOp()
to terminate operations initiated by clients and do not terminate internal database operations.db.killOp()
终止客户端启动的操作,而不终止内部数据库操作。
The db.killOp()
method can be run on a mongos
and can kill queries (read operations) that are running on more than one shard in a cluster.db.killOp()
方法可以在mongos
上运行,并可以终止在群集中多个分片上运行的查询(读取操作)。
For example, to kill a query operation on a MongoDB 4.0+ sharded cluster:例如,要终止MongoDB 4.0+分片集群上的查询操作:
On the same 在客户端发出查询的同一个mongos
where the client issued the query, find the opid of the query operation to kill by running the aggregation pipeline $currentOp
with the localOps: true
: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" } ] )
You must issue this aggregation operation on the same 您必须在客户端发出查询的同一个mongos
where the client issued the query.mongos
上发出此聚合操作。
Once you find the query operation to kill, issue 找到要终止的查询操作后,在db.killOp()
with the opid on the mongos
mongos
上发出带有opid的db.killOp()
db.killOp(<opid of the query to kill>)
The localOps
parameter in $currentOp
$currentOp
中的localOps
参数
Alternatively, you can find and kill the read operation from a shard member where the operation is running. 或者,您可以从运行操作的分片成员中找到并终止读取操作。MongoDB 4.0+ propagates the kill operation to the other shards and MongoDB 4.0+将kill操作传播到其他shard和mongos
instances:mongos
实例:
On one of the shards where the operation is running, find the opid of the query operation to kill:在运行操作的其中一个分片上,找到要终止的查询操作的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" } ] )
Once you find the query operation to kill, issue 找到要终止的查询操作后,在分片成员上发出带有opid的db.killOp()
with the opid on the shard member:db.killOp()
:
db.killOp(<opid of the query to kill>)
MongoDB 4.0+ propagates the kill operation to the other shards and MongoDB 4.0+将kill操作传播到其他shard和mongos
instances.mongos
实例。
To kill a query running on 3.6 (or earlier) sharded clusters, you must kill the operation on all the shards associated with the query.要终止在3.6(或更早版本)分片集群上运行的查询,必须终止与查询关联的所有分片上的操作。
From a 在mongos
, run the aggregation pipeline $currentOp
to find the opid(s) of the query operation on the shards:mongos
中,运行聚合管道$currentOp
以查找分片上查询操作的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" } ] )
When run on a 在mongos
, $currentOp
returns the opids in the format of "<shardName>:<opid on that shard>"
; e.g.mongos
上运行时,$currentOp
以"<shardName>:<opid on that shard>"
的格式返回opid;如。
{ "shard" : "shardB", .. "opid" : "shardB:79014", ... }, { "shard" : "shardA", .. "opid" : "shardA:100813", ... },
Using the opid information, issue 使用opid信息,在db.killOp()
on the mongos
to kill the operation on the shards.mongos
上发出db.killOp()
以终止对分片的操作。
db.killOp("shardB:79014"); db.killOp("shardA:100813");
Starting in MongoDB 3.6, MongoDB drivers associate all operations with a server session, with the exception of unacknowledged writes.从MongoDB 3.6开始,MongoDB驱动程序将所有操作与服务器会话相关联,未确认的写入除外。
If the write operation is associated with a session, you can use the 如果写入操作与会话相关联,则可以在killSessions
command on the mongos
to kill the write operation across shards.mongos
上使用killSessions
命令来终止跨分片的写入操作。
Run the aggregation pipeline 在$currentOp
on the mongos
to find the lsid
(logical session id).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" } ] )
Using the returned 使用返回的lsid
information, issue the killSessions
command on the mongos
to kill the operation on the shards.lsid
信息,在mongos
上发出killSessions
命令以终止分片上的操作。
db.adminCommand( { killSessions: [ { "id" : UUID("80e48c5a-f7fb-4541-8ac0-9e3a1ed224a4"), "uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=") } ] } )
Run the aggregation pipeline 在$currentOp
on the mongos
or the individual shards find the lsid
(logical session id).mongos
上运行聚合管道$currentOp
,或者单个分片找到lsid
(逻辑会话id)。
use admin db.aggregate( [ { $currentOp : { allUsers: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. // e.g. { "op" : "update", "ns": "mydb.someCollection" } ] )
Using the returned lsid information, issue the 使用返回的lsid信息,在killSessions
command on the mongos
to kill the operation on the shards.mongos
上发出killSessions
命令以终止分片上的操作。
db.adminCommand( { killSessions: [ { "id" : UUID("80e48c5a-f7fb-4541-8ac0-9e3a1ed224a4"), "uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=") } ] } )
If the write operation is not associated with a session, you must find and kill the operation on all the shards associated with the write.如果写入操作未与会话关联,则必须在与写入操作关联的所有分片上查找并终止该操作。
From a 在mongos
, run the aggregation pipeline $currentOp
to find the opid(s) of the query operation on the shards:mongos
中,运行聚合管道$currentOp
以查找分片上查询操作的opid:
use admin db.aggregate( [ { $currentOp : { allUsers: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. ] )
When run on a 在mongos
, $currentOp
returns the opids in the format of "<shardName>:<opid on that shard>"
; e.g.mongos
上运行时,$currentOp
以"<shardName>:<opid on that shard>"
的格式返回opid;如。
{ "shard" : "shardB", .. "opid" : "shardB:79214", ... }, { "shard" : "shardA", .. "opid" : "shardA:100913", ... },
Using the opid information, issue 使用opid信息,在db.killOp()
on the mongos
to kill the operation on the shards.mongos
上发出db.killOp()
以终止对分片的操作。
db.killOp("shardB:79014"); db.killOp("shardA:100813");
On systems running with 在授权运行的系统上,要终止非用户所有的操作,用户必须具有包括authorization
, to kill operations not owned by the user, the user must have access that includes the killop
privilege action.killop
权限操作的访问权限。
Changed in version 3.2.9.在版本3.2.9中更改。
mongod
instances, users can kill their own operations even without the killop
privilege action.mongod
实例上,即使没有killop
权限操作,用户也可以终止自己的操作。