MongoDB incluye la perfilador de base de datos, que puede identificar consultas lentas y ayudarle a determinar cómo mejorar el rendimiento de las consultas.
Acerca de esta tarea
Rendimiento, almacenamiento y seguridad
Esta tarea utiliza el generador de perfiles de base de datos para identificar consultas lentas en una base de datos en ejecución. mongod instancia. Cuando está habilitado, el perfilador de base de datos puede afectar el rendimiento y el uso del disco, además de exponer datos de query no cifrados.
Advertencia
Considera las implicaciones de rendimiento, almacenamiento y seguridad antes de utilizar el perfilador de base de datos en una implementación de producción.
Perfilador del query de Atlas
Los usuarios de Atlas pueden aprovechar el perfilador del query de Atlas para identificar queries lentas con la comodidad de la visualización mediante una gráfica de dispersión.
Para más información, consulte Supervisa el Rendimiento de las queries con el perfilador del query.
Consultas lentas
Una consulta lenta es aquella que tarda más tiempo del especificado en ejecutarse. Para esta tarea, el umbral de consulta lenta se establece en 100 milisegundos.
En algunos casos de uso, puede necesitar que las consultas se ejecuten más rápido. En otros, es posible que DEBAS aumentar el umbral para centrarte solo en aquellas consultas que son las más lentas.
Elija un umbral de consulta lento que refleje las necesidades específicas de su aplicación y base de datos.
Context
Cuando se habilita, el perfilador de base de datos supervisa las consultas solo a nivel de base de datos. Si necesita que el perfilador supervise queries lentas en varias bases de datos, ejecute el método db.setProfilingLevel() en cada base de datos.
Clústeres fragmentados
El perfilador de base de datos no está disponible a través de mongos.
Pasos
Habilitar el generador de perfiles de base de datos.
Para habilitar el perfilador de base de datos para supervisar queries lentas, utiliza el método db.setProfilingLevel():
db.setProfilingLevel(1, 100)
{ was: 0, slowms: 1, sampleRate: 1, ok: 1}
Esto establece el nivel de perfilado en 1, que monitorea las queries lentas, y define una query como lenta si tarda más de 100 milisegundos en ejecutarse.
Comprueba si hay queries lentas.
Para enumerar cualquier consulta lenta encontrada por el perfilador de base de datos, consulta la colección system.profile para obtener los datos relevantes:
db.system.profile.find( { }, { command: 1, millis: 1, docsExamined: 1, keysExamined: 1, nreturned: 1 } ).sort( { ts: -1 } )
[ { command: { find: 'people', filter: { age: { '$gt': 35 } }, lsid: { id: UUID('ae3e9932-0a78-47ab-b741-01dd3bfb3563') }, '$db': 'contacts' }, keysExamined: 0, docsExamined: 100000, nreturned: 40, millis: 143 } ]
El comando proporciona una lista de consultas lentas observadas por el perfilador de base de datos.
La proyección filtra los documentos devueltos para que incluyan información que puede resultar útil para determinar qué causó que la query se ejecutara lentamente.
Si
keysExamined0es, indica que la consulta no utilizó ningún índice. Para solucionarlo, cree un índice en la colección.Si se utilizó un índice y
docsExaminedes mucho mayor quenreturned, indica que el índice no es efectivo. Es posible que deba actualizar el índice o crear uno nuevo en uno o más campos utilizados por el filtro de consulta.Si
keysExaminedes alto ydocsExaminedes bajo, indica un uso efectivo del índice.
Explica la query.
Si el perfilador de base de datos identifica un query que requiere mayor investigación, 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.
Ejemplos
Ignore Indexes
Para evaluar el rendimiento en una colección con un índice, puedes configurar la query para ignorar los índices utilizando el método hint( {
$natural: 1 } ).
db.listingsAndReviews.find( { $or: [ { "address.market": "Berlin" }, { "review_scores.review_scores_cleanliness": { $lt: 5 } } ], $where: function () { return this.amenities && this.amenities.length > 15; } } ).sort( { description: 1 } ).hint( { $natural: 1 } );
Esto puede resultarle útil en los casos en los que desee comparar el rendimiento de las consultas con un escaneo de colección con respecto al de un escaneo de índice.