Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.killOp()

在此页面上

  • 说明
  • 分片集群
  • 访问控制
db.killOp(opid)

终止操作 ID 所指定的操作。要查找操作及其对应的 ID,请参阅 $currentOpdb.currentOp()

db.killOp() 方法具有以下参数:

Parameter
类型
说明
op
数字
操作 ID。

警告

终止正在运行的操作时要格外小心。仅使用 db.killOp() 来终止客户端发起的操作,而不会终止数据库内部操作。

db.killOp() 方法可在 mongos 上运行,并可终止在集群中多个分片上运行的查询(读取操作)。

例如,要终止分片集群上的查询操作:

  1. 在客户端发出查询时所在的那个 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 上发出此聚合操作。

  2. 找到要终止的查询操作后,在 mongos 上发出带有 opid 的 db.killOp()

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

提示

另请参阅:

$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" }
    ] )
  2. 找到要终止的查询操作后,在分片节点上发出带有 opid 的 db.killOp()

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

    MongoDB 将终止操作传播到其他分片和 mongos 实例。

会话内

MongoDB 驱动程序将所有操作与服务器会话相关联,但未确认的写入除外。

如果写入操作与某个会话相关联,您可以在 mongos 上使用 killSessions 命令来终止跨分片的写入操作。

  1. 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. 使用返回的 lsid 信息,在 mongos 上发出 killSessions 命令以终止分片上的操作。

      db.adminCommand( { killSessions: [
      { "id" : UUID("80e48c5a-f7fb-4541-8ac0-9e3a1ed224a4"), "uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=") }
      ] } )
无会话

如果该写入操作与会话关联,则必须在与该操作关联的所有分片上查找并终止该操作。

  1. 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",
    ...
    },
  2. 使用操作 ID 信息,在 mongos 上发出 db.killOp() 以终止分片上的操作。

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

在使用authorization运行的系统上,要终止不属于用户的操作,用户必须具有包括killop特权操作的访问权限。

mongod实例上,即使没有killop特权操作,用户也可以终止自己的操作。

提示

另请参阅:

后退

db.hostInfo