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.
Acerca de esta tarea
Explicar queries
El método está disponible para consultas que utilizan los siguientes explain() métodos:
Perfiladores
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 |
|---|---|
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.
Pasos
Explique la consulta.
Ejecuta la consulta que deseas evaluar con el método explain():
db.movies.explain( "executionStats").find( { year: { $gt: 1990 }, rated: { $in: [ "PG", "PG-13" ] } } )
Evaluar el tiempo de ejecución.
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.
Evaluar las etapas de ejecución.
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.
FETCHIndica 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.
Evaluar examen clave.
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.
Evaluar el filtro.
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
totalDocsExaminedtiene un valor mucho mayor que el denReturned, 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
totalDocsExaminedynReturnedtienen los mismos valores, significa que MongoDB solo examinó los documentos que devolvió. Esto indica un índice efectivo.