La $currentOp La etapa de agregación proporciona información sobre todas las operaciones que se ejecutan actualmente en MongoDB. Si su aplicación presenta problemas de rendimiento, puede crear una canalización de agregación en torno a esta etapa para supervisar consultas lentas y problemas similares.
Acerca de esta tarea
Perfiladores de bases de datos
Esta tarea utiliza $currentOp para identificar consultas lentas que se están ejecutando actualmente en tu aplicación. Para encontrar todas las queries lentas dentro de un periodo específico, considera utilizar un perfilador.
perfilador | Descripción |
|---|---|
Proporciona un gráfico de dispersión a los clientes de Atlas, lo que facilita la identificación de consultas lentas y valores atípicos de rendimiento. | |
Almacena información sobre el rendimiento de las consultas en una colección, lo que le permite consultar a MongoDB consultas con problemas de rendimiento específicos. |
Tanto el perfilador del query de Atlas como el perfilador de base de datos pueden afectar el rendimiento del servidor, ocupar espacio en disco y exponer metadatos del query sobre campos cifrados. Considera las implicaciones de rendimiento y seguridad antes de activarlas.
Explicar queries
Esta tarea identifica las consultas con problemas de rendimiento. Si ya sabes qué consultas tienen problemas de rendimiento, consulta la página Explicación de consultas lentas para resolverlas.
Pasos
Recuperar operaciones actuales.
Usa la etapa de agregación $currentOp para recuperar las operaciones actuales de MongoDB:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { allUsers: true } }, { $match: { secs_running: { $gt: 2 } } }, { $sort: { secs_running: 1 } } ] )
[ { "opid": "12345", "secs_running": 5, "active": true, "ns": "sample_mflix.movies", "command": { "find": "movies", "filter": { "title": { "$regex": "The" } } }, "planSummary": "COLLSCAN", "locks": { ... }, "client": "203.0.113.25:43210" } ]
Este pipeline de agregación recupera todas las operaciones actuales en el clúster. La etapa de agregación $match luego filtra las operaciones a aquellas que han estado ejecutándose durante más de dos segundos. Esto le permite filtrar consultas que se ejecutan dentro de un período específico. Ajusta el valor para que coincida con las necesidades de tu aplicación y base de datos.
La $sort etapa ordena los resultados en orden ascendente de operation time.
Verificar actividad.
Vea el campo.currentOp.active Si currentOp.active truees, MongoDB indica que la operación se está ejecutando.
Para detener una operación de larga duración, utilice el método db.killOp() para detener el opiddado.
Comprueba si hay bloqueos.
Vea el campo.currentOp.waitingForLock Si currentOp.waitingForLock truees, otra operación en ejecución en el servidor o clúster está bloqueando la consulta.
Para detener una operación bloqueada, utiliza el método db.killOp() para detener el opidcorrespondiente.
Consulte el resumen del plan.
Verifique el valor en el campo currentOp.planSummary.
IXSCAN- Indica que la consulta realizó un escaneo de índice.
COLLSCAN- Indica que la query realizó un escaneo completo de la colección. Para corregir esto, Crea un índice.
Explica la query.
Si la etapa de agregación $currentOp devuelve un query que requiere una investigación adicional, utiliza el método explain() para analizar el plan del query y las estadísticas de ejecución.
Para más detalles, consulte Explicación de consultas lentas.