Docs 主页 → 开发应用程序 → MongoDB Manual
db.killOp()
说明
db.killOp(opid)
终止操作 ID 所指定的操作。要查找操作及其对应的 ID,请参阅
$currentOp
或db.currentOp()
。db.killOp()
方法具有以下参数:范围类型说明op
数字操作 ID。警告
终止正在运行的操作时要格外小心。仅使用
db.killOp()
终止客户端发起的操作,而不终止内部数据库操作。
分片集群
终止读操作
db.killOp()
方法可以在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", ... }, 使用 opid 信息,在 上发出
db.killOp()
mongos
以终止分片上的操作。db.killOp("shardB:79014"); db.killOp("shardA:100813");
访问控制
在使用authorization
运行的系统上,要终止不属于用户的操作,用户必须具有包括killop
特权操作的访问权限。
在mongod
实例上,即使没有killop
特权操作,用户也可以终止自己的操作。