Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

db.killOp()

Nesta página

  • Descrição
  • Compatibilidade
  • Cluster fragmentado
  • Controle de acesso
db.killOp(opid)

Termina uma operação conforme especificado pelo ID da operação. Para encontrar operações e seus IDs correspondentes, consulte $currentOp ou db.currentOp().

O método db.killOp() tem o seguinte parâmetro:

Parâmetro
Tipo
Descrição
op
número
Um ID de operação.

Aviso

Encerre as operações em execução com extrema cautela. Use apenas db.killOp() para encerrar operações iniciadas por clientes e não encerre operações internas de banco de dados.

Esse método está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Importante

Este comando tem suporte limitado em M0, M2, M5 e M10+ clusters. Para obter mais informações, consulte Comandos não suportados.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O método db.killOp() pode ser executado em um mongos e pode matar queries (operações de leitura) que estão sendo executadas em mais de um fragmento em um agrupamento.

Por exemplo, para matar uma operação de consulta em um agrupamento fragmentado:

  1. No mesmo mongos onde o cliente enviou a query, localize a opção da operação de query para encerrar executando o aggregation pipeline $currentOp com localOps: true:

    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" }
    ] )

    Importante

    Você deve emitir esta operação de aggregation no mesmo mongos onde o cliente enviou a query.

  2. Depois de encontrar a operação de query para eliminar, emita db.killOp() com o opid no mongos:

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

Dica

Veja também:

O parâmetro localOps em $currentOp.

Como alternativa, você pode localizar e encerrar a operação de leitura de um membro do shard onde a operação está em execução. O MongoDB propaga a operação kill para os outros fragmentos e instâncias mongos :

  1. Em um dos fragmentos onde a operação está sendo executada, localize o opid da operação de query para eliminar:

    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. Depois de encontrar a operação de query para encerrar, emita db.killOp() com o opid no membro do shard:

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

    O MongoDB propaga a operação de eliminação para os outros fragmentos e as instâncias do mongos.

Dentro de uma sessão

Os drivers do MongoDB associam todas as operações a uma sessão do servidor, com exceção das gravações não reconhecidas.

Se a operação de gravação estiver associada a uma sessão, você poderá usar o comando killSessions no mongos para matar a operação de gravação em fragmentos.

  1. Execute o pipeline de agregação $currentOp no mongos para localizar o lsid (ID da sessão lógica).

    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. Utilizando as informações do lsid retornadas, emita o comando killSessions no mongos para matar a operação nos fragmentos.

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

Se a operação de gravação não estiver associada a uma sessão, você deverá localizar e matar a operação em todos os fragmentos associados à gravação.

  1. Em um mongos, execute o aggregation pipeline $currentOp para localizar o(s) opid(s) da query nos fragmentos:

    use admin
    db.aggregate( [
    { $currentOp : { allUsers: true } },
    { $match : <filter condition> } // Optional. Specify the condition to find the op.
    ] )

    Ao executar em um mongos, $currentOp retorna as opções no formato de "<shardName>:<opid on that shard>"; por exemplo,

    {
    "shard" : "shardB",
    ..
    "opid" : "shardB:79214",
    ...
    },
    {
    "shard" : "shardA",
    ..
    "opid" : "shardA:100913",
    ...
    },
  2. Usando as informações de opid, emita db.killOp() no mongos para encerrar a operação nos fragmentos.

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

Em sistemas executados com authorization , para eliminar operações que não pertencem ao usuário, o usuário deve ter acesso que inclua a ação de privilégio killop .

Em instâncias do mongod , os usuários podem matar suas próprias operações mesmo sem a ação de privilégio do killop .

Dica

Veja também:

Voltar

db.hostInfo