Descripción
db.killOp(opid)Termina una operación según lo especificado por el ID de operación. Para encontrar operaciones y sus ID correspondientes, consulte
$currentOpodb.currentOp().La
db.killOp()el método tiene el siguiente parámetro:ParameterTipoDescripciónopNúmero
Una ID de operación.
Advertencia
Terminar las operaciones en curso con extrema precaución. Solo utiliza
db.killOp()para terminar operaciones iniciadas por clientes y no termina operaciones internas de bases de datos.
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Importante
MongoDB Atlas limita el uso de este método al usuario de MongoDB que ejecutó la operación. Para obtener información sobre el soporte de Atlas para todos los comandos, consulta Comandos no admitidos.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Clúster fragmentado
Terminar operaciones de lectura
El método db.killOp() puede ejecutarse en un mongos y puede cancelar consultas (operaciones de lectura) que se estén ejecutando en más de una partición en un clúster.
Por ejemplo, para abortar una operación de consulta en un clúster:
En el mismo
mongosdonde el cliente ejecutó la query, debe localizar el opid de la operación de query a interrumpir ejecutando el pipeline de agregación$currentOpcon ellocalOps: 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
Debes emitir esta operación de agregación en el mismo
mongosdonde el cliente emitió la query.Una vez que hayas encontrado la operación de query que deseas eliminar, emite
db.killOp()con el opid en elmongos:db.killOp(<opid of the query to kill>)
Tip
El parámetro localOps en $currentOp.
Como alternativa, puede buscar y matar la operación de lectura en un nodo de la partición donde se esté ejecutando la operación. MongoDB propaga la operación de terminación a las otras particiones y mongos instancias:
En una de las particiones donde se está ejecutando la operación, encuentra el opid de la operación de query que se va a 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" } ] ) Una vez que encuentres la operación de query que quieres terminar, emite
db.killOp()con el opid en el nodo de la partición:db.killOp(<opid of the query to kill>) MongoDB propaga la operación de eliminación a las otras particiones e instancias
mongos.
Operaciones de escritura de eliminación
- Dentro de una sesión
Los drivers de MongoDB asocian todas las operaciones con una sesión de servidor, con la excepción de las escrituras no reconocidas.
Si la operación de escritura está asociada a una sesión, puedes utilizar el comando
killSessionsen elmongospara cancelar la operación de escritura entre particiones.Ejecutar la pipeline de agregación
$currentOpen elmongospara encontrar ellsid(ID de sesión 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 la información devuelta
lsid, emite el comandokillSessionsen elmongospara detener la operación en las particiones.db.adminCommand( { killSessions: [ { "id" : UUID("80e48c5a-f7fb-4541-8ac0-9e3a1ed224a4"), "uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=") } ] } )
- Sin una sesión
Si la operación de escritura no está asociada a una sesión, debes encontrar y cancelar la operación en todas las particiones asociadas con el guardado.
Desde un
mongos, ejecute el pipeline de agregación$currentOppara encontrar el/los opid(s) de la operación de query en las particiones:use admin db.aggregate( [ { $currentOp : { allUsers: true } }, { $match : <filter condition> } // Optional. Specify the condition to find the op. ] ) Cuando se ejecuta en un
mongos,$currentOpdevuelve los opids en el formato de"<shardName>:<opid on that shard>";, p. ej.,{ "shard" : "shardB", .. "opid" : "shardB:79214", ... }, { "shard" : "shardA", .. "opid" : "shardA:100913", ... }, Usando la información del opid, ejecuta
db.killOp()en elmongospara terminar la operación en las particiones.db.killOp("shardB:79014"); db.killOp("shardA:100813");
Control de acceso
En los sistemas que se ejecutan con authorization, para terminar operaciones que no pertenecen al usuario, este debe tener acceso que incluya la acción de privilegio killop.
En las instancias mongod, los usuarios pueden finalizar sus propias operaciones incluso sin la acción de privilegio killop.