Docs Menu
Docs Home
/ /
/ / /

Explicar las consultas lentas

El explain() El método proporciona información sobre cómo MongoDB planifica y ejecuta la consulta dada. Esta información puede resultarle útil para solucionar problemas de rendimiento de consultas y planificar optimizaciones.

El método está disponible para consultas que utilizan los siguientes explain() 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 limitar la lista de consultas a analizar solo a aquellas que son lentas, puede utilizar un generador de perfiles:

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 las necesidades de su base de datos, no se requiere optimización.

  • Si el tiempo de ejecución supera un período aceptable, se requiere un análisis más profundo para determinar por qué la consulta 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.

Verifique el campo para cada etapa de inputStage.stage 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 obtuvo 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 obtener más información,consulte Ejecutar consultas cubiertas.

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

Las consultas que realizan operaciones de filtrado u ordenamiento que muestran una etapa COLLSCAN se beneficiarían de un índice.

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

4

Es posible que las consultas sobre colecciones con índices no hagan un uso efectivo de 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 fueron ineficaces.

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

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

5

Las consultas que usan filtros para especificar los resultados pueden presentar problemas. Para identificar un filtro ineficiente, compare el valor del campo executionStats.totalDocsExamined executionStats.nReturned con el del campo.

  • 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.

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

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

Volver

Interpretar los resultados

En esta página