Database Manual / Reference / mongosh Methods / Databases

db.killOp() (mongosh method方法)

Description描述

db.killOp(opid)

Terminates an operation as specified by the operation ID. 根据操作ID指定终止操作。To find operations and their corresponding IDs, see $currentOp or db.currentOp().要查找操作及其对应的ID,请参阅$currentOpdb.currentOp()

The db.killOp() method has the following parameter:db.killOp()方法有以下参数:

Parameter参数Type类型Description描述
opnumber数字An operation ID.操作ID。

Warning

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()终止客户端发起的操作,而不终止内部数据库操作。

Compatibility兼容性

This method is available in deployments hosted in the following environments:此方法在以下环境中托管的部署中可用:

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud:云中MongoDB部署的完全托管服务

Important

MongoDB Atlas limits the use of this method to the MongoDB user who ran the operation. MongoDB Atlas将此方法的使用限制在运行操作的MongoDB用户。For information on Atlas support for all commands, see Unsupported Commands.有关Atlas支持所有命令的信息,请参阅不支持的命令

  • MongoDB Enterprise: The subscription-based, self-managed version of MongoDB:MongoDB的基于订阅的自我管理版本
  • MongoDB Community: The source-available, free-to-use, and self-managed version of MongoDB:MongoDB的源代码可用、免费使用和自我管理版本

Sharded Cluster分片集群

Kill Read Operations终止读取操作

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 sharded cluster:例如,要终止分片集群上的查询操作:

From the mongos Instance来自mongos实例
  1. 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上,通过运行聚合管道$currentOplocalOps:true来找到要杀死的查询操作的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" }
    ] )

    Important

    You must issue this aggregation operation on the same mongos where the client issued the query.您必须在客户端发出查询的同一mongos上发出此聚合操作。

  2. 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>)

Tip

The localOps parameter in $currentOp.$currentOp中的localOps参数。

From a shard member来自分片成员

Alternatively, you can find and kill the read operation from a shard member where the operation is running. MongoDB propagates the kill operation to the other shards and mongos instances:或者,您可以从运行操作的分片成员中查找并终止读取操作。MongoDB将kill操作传播到其他分片和mongos实例:

  1. On one of the shards where the operation is running, find the opid of the query operation to kill:在其中一个正在运行操作的分片上,找到要杀死的查询操作的副本:

    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" }
    ] )
  2. Once you find the query operation to kill, issue db.killOp() with the opid on the shard member:找到要终止的查询操作后,在分片成员上发出带有opid的db.killOp()

    db.killOp(<opid of the query to kill>)

    MongoDB propagates the kill operation to the other shards and mongos instances.MongoDB将kill操作传播到其他分片和mongos实例。

Kill Write Operations终止写入操作

Within a Session在一次会话中

MongoDB drivers associate all operations with a server session, with the exception of unacknowledged writes.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命令来终止跨分片的写操作。

  1. 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" }
    ] )
    1. 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=") }
      ] } )
Without a Session没有会话

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.如果写入操作与会话无关,则必须在与写入相关的所有分片上找到并终止该操作。

  1. 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",
    ...
    },
  2. Using the opid information, issue db.killOp() on the mongos to kill the operation on the shards.使用opid信息,对mongos发出db.killOp()以终止对分片的操作。

    db.killOp("shardB:79014");
    db.killOp("shardA:100813");

Access Control访问控制

On systems running with authorization, to kill operations not owned by the user, the user must have access that includes the killop privilege action.authorization运行的系统上,要终止非用户所有的操作,用户必须具有包括killop权限操作在内的访问权限。

On mongod instances, users can kill their own operations even without the killop privilege action.mongod实例上,即使没有killop权限操作,用户也可以终止自己的操作。