Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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 explain() en una query de muestra para intentar identificar problemas de rendimiento. En la práctica, puede ser difícil ejecutar explain() en cada query que ejecuta tu 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 una gráfica de dispersión a los clientes de Atlas, lo que facilita la identificación de queries lentas y casos atípicos de rendimiento.

Almacena la información del rendimiento de las queries en una colección, lo que permite query MongoDB sobre queries 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

Consulta el campo explain.executionStats.executionTimeMillis para ver el tiempo de ejecución en milisegundos. Esto muestra el tiempo total, incluyendo el tiempo que se tarda en compilar y seleccionar un plan del query además del tiempo que lleva ejecutar el plan.

  • 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 colección.
IXSCAN
Indica que MongoDB realizó un escaneo de índices.
FETCH

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

Si la query devuelve un pequeño número de campos y la aplicación no realiza muchas escrituras en esta colección, considera agregar índices para cubrir la query. Esto permite a MongoDB obtener los valores de los campos desde el í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 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 más información, consulta 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