db.killOp()
说明
db.killOp(opid)
终止操作 ID 所指定的操作。要查找操作及其对应的 ID,请参阅
$currentOp
或db.currentOp()
。db.killOp()
方法具有以下参数:Parameter类型说明op
数字操作 ID。警告
终止正在运行的操作时要格外小心。仅使用
db.killOp()
来终止客户端发起的操作,而不会终止数据库内部操作。
分片集群
终止读操作
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>)
或者,您可以从正在运行读取操作的分片节点中查找并终止该操作。MongoDB 将终止操作传播到其他分片和 mongos
实例:
在运行操作的其中一个分片上,找到要终止的查询操作的 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
以查找分片上查询操作的操作 ID:use admin db.aggregate( [ { $currentOp : { allUsers: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. ] ) 在
mongos
上运行时,$currentOp
以"<shardName>:<opid on that shard>"
格式返回操作 ID,例如{ "shard" : "shardB", .. "opid" : "shardB:79214", ... }, { "shard" : "shardA", .. "opid" : "shardA:100913", ... }, 使用操作 ID 信息,在
mongos
上发出db.killOp()
以终止分片上的操作。db.killOp("shardB:79014"); db.killOp("shardA:100813");
访问控制
在使用authorization
运行的系统上,要终止不属于用户的操作,用户必须具有包括killop
特权操作的访问权限。