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.
Acerca de esta tarea
Explicar queries
El método explain() está disponible para las consultas que utilizan los siguientes métodos:
perfilador
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 |
|---|---|
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
Explica la query.
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 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.
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.
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.
FETCHIndica 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.
Evalúa el examen clave.
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.
Evalúe el filtro.
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
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.Crea un índice en los campos de filtro para mejorar el rendimiento.
Si
totalDocsExaminedynReturnedtienen los mismos valores, indica que MongoDB solo examinó los documentos que devolvió. Esto indica un índice efectivo.