db.killOp()
Descrição
db.killOp(opid)
Termina uma operação conforme especificado pelo ID da operação. Para encontrar operações e seus IDs correspondentes, consulte
$currentOp
oudb.currentOp()
.O método
db.killOp()
tem o seguinte parâmetro:ParâmetroTipoDescriçãoop
númeroUm 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.
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
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
Cluster fragmentado
Eliminar operações de leitura
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:
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
comlocalOps: 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.Depois de encontrar a operação de query para eliminar, emita
db.killOp()
com o opid nomongos
:db.killOp(<opid of the query to kill>)
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" } ] ) 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
.
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
killSessions
nomongos
para matar a operação de gravação em fragmentos.Execute o pipeline de agregação
$currentOp
nomongos
para 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
lsid
retornadas, emita o comandokillSessions
nomongos
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.
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", ... }, Usando as informações de opid, emita
db.killOp()
nomongos
para encerrar a operação nos fragmentos.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
.