El $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 usa para identificar las consultas lentas que se están ejecutando en la aplicación. Para encontrar todas las consultas lentas en un período específico, considere usar un generador de $currentOp perfiles.
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 sabe qué consultas presentan problemas de rendimiento, consulte Explicar las consultas lentas para solucionarlos.
Pasos
Recuperar operaciones actuales.
Utilice la $currentOp etapa de agregación 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" } ]
Esta canalización de agregación recupera todas las operaciones actuales del clúster. La $match etapa de agregación filtra las operaciones que llevan ejecutándose más de dos segundos. Esto permite filtrar las consultas que se ejecutan dentro de un período específico. Ajuste el valor según las necesidades de su aplicación y base de datos.
La etapa ordena los resultados en orden ascendente de tiempo de $sort operación.
Comprobar 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 ejecución larga, utilice el método para detener db.killOp() el opid indicado.
Compruebe si hay cerraduras.
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, utilice el método para detener db.killOp() el opid dado.
Consulte el resumen del plan.
Compruebe el valor en el currentOp.planSummary campo.
IXSCAN- Indica que la consulta realizó un escaneo de índice.
COLLSCAN- Indica que la consulta realizó un análisis completo de la colección. Para corregirlo, cree un índice.
Explique la consulta.
Si la $currentOp etapa de agregación devuelve una consulta que requiere más investigación, utilice el explain() método para analizar el plan de consulta y las estadísticas de ejecución.
Para obtener más detalles, consulte Explicar las consultas lentas.