Cómo ver las queries lentas en MongoDb 🐢

Si tienes problemas de rendimiento en tu base de datos MongoDb, una de las cosas a revisar es en qué emplea más tiempo. Veamos como ver las queries lentas en MongoDb

Activa el registro de queries 📊

Primero, debemos activar el registro de queries. Para ello conéctate a MongoDb y ejecuta el siguiente comando:

// Registra todas las queries
db.setProfilingLevel(2);

Si sólo quieres registrar las queries más pesadas, por ejemplo, las que tarden 100ms o más, ejecuta:

// Registra queries +100ms
db.setProfilingLevel(1, { slowms: 100 });

Para ver si hay algún nivel previo o confirmar si se ha aplicado el nuevo:

db.getProfilingStatus();

Cuya salida es algo como:

{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }

Ejemplo de activación por primera vez ("was":0) y registrando a partir de 100ms ("slowms":100) en estado válido ("ok": 1)

Cuando todo esté bajo control y quieras desactivarlo, lanza:

// Desactiva profiling
db.setProfilingLevel(0);

💡 Para más info de estos comandos, consulta la documentación oficial sobre profiling

Ver las queries más lentas 🐢

Los resultados se vuelcan en la colección db.system.profile

Asi que para ver el top 10 de queries lentas, podemos lanzar:

db.system.profile.find().limit(10).sort( { millis : -1 } ).pretty()

Ordenadas de las más lentas a más rapidas. En función de si son agregaciones, inserciones, actualizaciones o consultas, habrá diferentes campos por tipo de operación.

Así podemos encontrar si se utilizan índices, si se escanean más filas de las debidas y en definitiva, qué instrucciones se deben optimizar primero 🎯

💡 Si estás teniendo problemas de rendimiento, te puedo recomendar las recomendaciones sobre performance en la documentación oficial

Si tienes algún duda o pregunta, deja un comenario abajo 👇