Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
Database Profiler

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 perfilador de bases de datos para identificar consultas lentas en una 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 obtener más información, consulte Supervise el rendimiento de las querys 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 slow query 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 es 0, indica que la query no utilizó un índice. Para resolver esto, crea un índice en la colección.

  • Si se utilizó un índice y docsExamined es mucho mayor que nreturned, indica que el índice es ineficaz. Es posible que necesites actualizar el índice o crear uno nuevo en uno o varios campos utilizados por el filtro de query.

  • Si keysExamined es alto y docsExamined es bajo, indica un uso efectivo del índice.

3

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 } );

Es posible que esto sea útil en casos en los que quiera comparar cómo se realiza una query con un escaneo de colección con respecto a un escaneo de índice.

Volver

Salida

En esta página