Descrição
db.killOp(opid)Termina uma operação conforme especificado pelo ID da operação. Para encontrar operações e seus ID correspondentes, consulte
$currentOpoudb.currentOp().The
db.killOp()method has the following parameter:ParâmetroTipoDescriçãoopnúmero
Um ID de operação.
Aviso
Terminate running operations with extreme caution. Only use
db.killOp()to terminate operations initiated by clients and do not terminate internal database operations.
Compatibilidade
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
O MongoDB Atlas limita o uso desse método ao usuário do MongoDB que executou a operação. Para obter informações sobre o suporte do Atlas a todos os comandos, 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
Cluster fragmentado
Eliminar operações de leitura
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.
Por exemplo, para matar uma operação de consulta em um agrupamento fragmentado:
No mesmo
mongosonde o cliente enviou a query, localize a opção da operação de query para encerrar executando o aggregation pipeline$currentOpcomlocalOps: 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
mongosonde o cliente enviou a query.Once you find the query operation to kill, issue
db.killOp()with the opid on themongos:db.killOp(<opid of the query to kill>)
Dica
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 :
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" } ] ) Once you find the query operation to kill, issue
db.killOp()with the opid on the shard member: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.
Eliminar operações de gravação
- 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
killSessionsnomongospara matar a operação de gravação em fragmentos.Execute o pipeline de agregação
$currentOpnomongospara localizar olsid(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" } ] ) Utilizando as informações do
lsidretornadas, emita o comandokillSessionsnomongospara 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.
Em um
mongos, execute o aggregation pipeline$currentOppara 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,$currentOpretorna as opções no formato de"<shardName>:<opid on that shard>"; por exemplo,{ "shard" : "shardB", .. "opid" : "shardB:79214", ... }, { "shard" : "shardA", .. "opid" : "shardA:100913", ... }, Using the opid information, issue
db.killOp()on themongosto kill the operation on the shards.db.killOp("shardB:79014"); db.killOp("shardA:100813");
Controle de acesso
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