Monitorear consultas lentas en MongoDB

Hay ocasiones en las que se puede notar una demora en las consultas que se hacen a MongoDB, con el Profiler podremos registrar operaciones que superan un tiempo de ejecución establecido y aplicar las mejoras de optimización correspondientes.

Activar Profiler

Para activarlo primero accede a la base de datos y luego ejecuta:

db.setProfilingLevel(1, { slowms: 5000 });
JavaScript

Esto registra cualquier operación que tarde más de 5000 ms. Los niveles disponibles son:

  • 0: Desactivado
  • 1: Solo operaciones lentas
  • 2: Todas las operaciones (no recomendado en producción)

Ver estado de Profiler

db.getProfilingStatus();

// Este comando devuelve un objeto como:
// { 
//   was: 1,
//   slowms: 200,
//   sampleRate: 1 
// }
JavaScript
  • was: nivel actual del profiler (0 = off, 1 = slow ops, 2 = all ops)
  • slowms: umbral configurado
  • sampleRate: porcentaje de operaciones que se muestrean

Ver registros

Consulta las operaciones más recientes:

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

Filtrar las consultas que mas se demoran mas de 5 segundos

db.system.profile
  .find({ millis: { $gt: 5000 } })
  .sort({ millis: -1 })
  .limit(10);
JavaScript

Filtrar por consultas que se demoran mas de 5 segundos mostrando solo la duración, la hora de ejecución y el comando ejecutado

db.system.profile
  .find({ millis: { $gt: 5000 } }, { millis: 1, ts: 1, command: 1 })
  .sort({ millis: -1 })
  .limit(10);
JavaScript

Desactivar Profiler

db.setProfilingLevel(0);
JavaScript

Recomendaciones

  • Usa un slowms entre 50 y 200 ms según tus necesidades.
  • Nivel 2 solo para pruebas, ya que impacta el rendimiento.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *