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
/ /
/ / /

Explicar las consultas lentas

La explain() El método proporciona información sobre cómo MongoDB planea y ejecuta la query dada. Puede encontrar útil esta información al solucionar problemas de rendimiento de consultas y planificar optimizaciones.

El método explain() está disponible para las consultas que utilizan los siguientes métodos:

  • aggregate()

  • count()

Esta tarea ejecuta el método en una consulta de muestra para identificar problemas de rendimiento. En la práctica, puede resultar difícil explain() ejecutar explain() en cada consulta que ejecuta la aplicación.

Para reducir la lista de consultas a analizar únicamente a aquellas que son lentas, puedes utilizar un perfilador:

perfilador
Descripción

Perfilador del query de Atlas

Proporciona un gráfico de dispersión a los clientes de Atlas, lo que facilita la identificación de consultas lentas y valores atípicos de rendimiento.

Almacena información sobre el rendimiento de las consultas en una colección, lo que le permite consultar a MongoDB consultas con problemas de rendimiento específicos.

Tanto el perfilador del query de Atlas como el perfilador de base de datos pueden afectar el rendimiento del servidor, ocupar espacio en disco y exponer metadatos del query sobre campos cifrados. Considera las implicaciones de rendimiento y seguridad antes de activarlas.

1

Ejecuta la consulta que deseas evaluar con el método explain():

db.movies.explain( "executionStats").find( {
year: { $gt: 1990 },
rated: { $in: [ "PG", "PG-13" ] }
} )
2

Consulte el campo para ver el tiempo de ejecución en milisegundos. Esto muestra el tiempo total, incluyendo el tiempo que tarda en crear y seleccionar un plan de consulta, además del tiempo que tarda en explain.executionStats.executionTimeMillis ejecutarse.

  • Si el tiempo de ejecución está dentro de un período aceptable para su aplicación y necesidades de base de datos, no se requiere optimización.

  • Si el tiempo de ejecución supera un periodo aceptable, se requiere un mayor análisis para determinar por qué la query tarda tanto en ejecutarse.

3

Las queries pueden ejecutarse en varias etapas. En cada etapa, MongoDB recopila documentos de la etapa anterior para realizar el próximo conjunto de operaciones. explain.executionStats.executionStages proporciona información sobre cada etapa de ejecución, donde cada nivel del campo inputStage muestra cómo MongoDB seleccionó documentos para la etapa.

Verifica el campo inputStage.stage para cada etapa de ejecución:

COLLSCAN
Indica que MongoDB realizó un escaneo de recopilación.
IXSCAN
Indica que MongoDB realizó un escaneo de índice.
FETCH

Indica que MongoDB recuperó documentos completos de la base de datos.

Si la consulta devuelve un número reducido de campos y la aplicación no realiza un uso intensivo de la escritura en esta colección, considere agregar índices para cubrir la consulta. Esto permite que MongoDB obtenga los valores de los campos del índice en lugar de leer el documento completo.

Para más información, consulte Ejecutar Consultas Cubiertas.

PROJECTION
Indica los campos de retorno filtrados de MongoDB en memoria.
SORT
Indica que MongoDB ordenó los documentos en la memoria o utilizó un índice cubierto.

Las queries que realizan operaciones de filtro o clasificación que muestran una etapa COLLSCAN se beneficiarían de un índice.

Para obtener más información, consulte Crear un índice.

4

Las consultas en colecciones con índices podrían no utilizar de manera efectiva los índices.

Compare el número de claves examinadas con el número de documentos examinados. Si el número de claves es significativamente menor que el número de documentos, indica que los índices no fueron efectivos.

Comprueba los valores totales de la consulta y asegúrate de que executionStats.totalDocsExamined no muestre un valor mayor que executionStats.totalKeysExamined.

Si el número de claves examinadas es mucho menor que el número de documentos examinados, revisa cada etapa en el campo executionStages, comparando el keysExamined y el docsExamined para determinar qué etapa no utilizó el índice. Luego, crear un índice para acomodar la query en esa etapa.

5

Es posible que las consultas que utilizan filtros para especificar los resultados tengan problemas. Para identificar un filtro ineficiente, compara el valor en el campo executionStats.totalDocsExamined con el valor del campo executionStats.nReturned.

  • Si totalDocsExamined tiene un valor mucho mayor que el de nReturned, indica un índice ineficaz. Es decir, MongoDB tuvo que escanear la colección para filtrar los resultados.

    Crea un índice en los campos de filtro para mejorar el rendimiento.

  • Si totalDocsExamined y nReturned tienen los mismos valores, indica que MongoDB solo examinó los documentos que devolvió. Esto indica un índice efectivo.

Volver

Interpretar los resultados

En esta página