Docs 菜单

Docs 主页开发应用程序MongoDB Manual

db.killOp()

在此页面上

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

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

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

范围
类型
说明
op
数字
操作 ID。

警告

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

db.killOp()方法可以在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. 使用 opid 信息,在 上发出db.killOp() mongos以终止分片上的操作。

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

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

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

提示

另请参阅:

← db.hostInfo()