Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Encontrar queries lentas

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.

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.

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.

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.

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.

El perfilador de base de datos no está disponible a través de mongos.

1

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.

2

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 keysExamined 0es, indica que la consulta no utilizó ningún índice. Para solucionarlo, cree un índice en la colección.

  • Si se utilizó un índice y docsExamined es mucho mayor que nreturned, 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 keysExamined es alto y docsExamined es bajo, indica un uso efectivo del índice.

3

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.

4

Para garantizar que el perfilador de base de datos no siga interrumpiendo el rendimiento, desactívalo cuando ya no sea necesario:

db.setProfilingLevel(0)
{ was: 1, slowms: 1, sampleRate: 1, ok: 1}

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.

Volver

Salida

En esta página