Extraer las consultas y query shapes más lentas de los datos del profiler
MongoDBRendimientoComando
// Recent slow operations (in the db where profiling is on; see set-profiling):
db.system.profile.find({ millis: { $gte: 100 } }, { ts: 1, ns: 1, op: 1, millis: 1, planSummary: 1, keysExamined: 1, docsExamined: 1, nreturned: 1, appName: 1 }).sort({ ts: -1 }).limit(20)
// Total time per query shape (those consuming the most time):
db.system.profile.aggregate([
{ $group: { _id: { ns: "$ns", plan: "$planSummary", shape: "$queryHash" }, n: { $sum: 1 }, totalMs: { $sum: "$millis" }, maxMs: { $max: "$millis" }, avgDocs: { $avg: "$docsExamined" } } },
{ $sort: { totalMs: -1 } },
{ $limit: 10 }
])
// Queries not using an index (COLLSCAN):
db.system.profile.find({ planSummary: "COLLSCAN" }, { ns: 1, millis: 1, command: 1 }).sort({ millis: -1 }).limit(10)Qué hace
A partir de los registros de la colección system.profile, lista las operaciones lentas recientes, el tiempo total por query shape (queryHash) y las consultas COLLSCAN que no usan índice.
Cuándo usarlo
Ante una queja de lentitud, para encontrar qué consulta consume el tiempo del servidor y determinar las necesidades de índices.
Precaución
system.profile es por defecto una capped collection de 1 MB y es por base de datos; en un sistema con carga los registros rotan en minutos, así que analice mientras el profiling está activo o justo después. El nivel de profiling 2 o slowms 0 escribe todas las operaciones y añade una sobrecarga considerable. Los registros se guardan solo en el miembro donde se ejecutaron y no se replican.
Relacionado
- Inspeccionar un plan de consulta con estadísticas de ejecución reales (explain executionStats)
- Encontrar índices no usados y ocultarlos antes de eliminarlos (hideIndex)
- Contar conexiones por aplicación y cliente (diagnóstico de connection storm)
- Medir la presión sobre la caché de WiredTiger (llenado, proporción sucia, eviction por la aplicación)