Para devolver información sobre Planes de consulta y estadísticas de ejecución de los planes de consulta, MongoDB proporciona los siguientes métodos:
Para aprender sobre los campos importantes de resultados de explain y cómo interpretarlos, se puede consultar Interpretar los resultados del plan de explicación.
Importante
explain ignora la caché del plan. En su lugar, se genera un conjunto de planes candidatos y se elige un ganador sin consultar la caché del plan. Además, explain impide que el planificador de query de MongoDB almacene en caché el plan ganador.
Nota
En esta página solo se muestran los campos de salida más importantes, y los campos para uso interno no están documentados. Los campos enumerados en el resultado están sujetos a cambios.
Explique la estructura de salida
Los resultados explain presentan los planes del query como un árbol de etapas. La estructura de salida puede diferir según el motor del query que utiliza la operación. Las operaciones pueden usar el motor del query clásico o el motor del query basado en ranuras.
Para ver cómo la estructura de salida puede diferir entre los dos motores de ejecución, consulte los siguientes ejemplos:
winningPlan: { stage: <STAGE1>, ... inputStage: { stage: <STAGE2>, ... inputStage: { stage: <STAGE3>, ... } } },
winningPlan: { queryPlan: { stage: <STAGE1>, ... inputStage: { stage: <STAGE2>, ... inputStage: { stage: <STAGE3>, ... } } } slotBasedPlan: { ... } },
Cada etapa pasa sus documentos resultantes o claves de índice al nodo principal. Los nodos hoja acceden a la colección o a los índices. Los nodos internos utilizan los documentos o las claves de índice que resultan de los nodos secundarios. El nodo raíz indica la etapa de la que MongoDB finalmente deriva el conjunto de resultados.
Las etapas son descriptivas de la operación. Por ejemplo:
COLLSCANpara un escaneo de colecciónIXSCANpara el escaneo de claves de índiceFETCHpara la recuperación de documentosGROUPpara la agrupación de documentosSHARD_MERGEpara combinar resultados de fragmentosSHARDING_FILTERpara el filtrado de documentos huérfanos de los fragmentosTS_MODIFYpara modificar una colección de series de tiempoBATCHED_DELETEpara el borrado de múltiples documentos que se agrupan internamente (a partir de MongoDB 6.1)EOFpara cuando una etapa está al final del flujoEXPRESSetapas para un conjunto limitado de queries que pueden eludir la planificación normal de queries para utilizar planes de escaneo de índices optimizados (Nuevo en la versión 8.0.)EXPRESSlas etapas pueden ser una de las siguientes:EXPRESS_CLUSTERED_IXSCANEXPRESS_DELETEEXPRESS_IXSCANEXPRESS_UPDATE
Se pueden explicar los resultados para MongoDB 5.1 y versiones posteriores
Esta sección muestra la salida explain para MongoDB 5.1 y versiones posteriores. Para ver el resultado de la explicación de versiones anteriores de MongoDB, se puede consultar la documentación de esa versión.
explain.explainVersionCampo de enteros.
explainVersiones la versión del formato de salida para el plan, como"1"o"2".Nuevo en la versión 5.1.
queryPlanner
La información de explain.queryPlanner detalla el plan seleccionado por el optimizador del query.
Estos ejemplos pueden combinar las estructuras de salida de los motores de ejecución clásicos y basados en ranuras de MongoDB. No están destinados a ser representativos. La salida puede diferir significativamente.
Para colecciones no particionadas, explain devuelve la siguiente información queryPlanner:
queryPlanner: { namespace: <string>, indexFilterSet: <boolean>, parsedQuery: { ... }, planCacheShapeHash: <hexadecimal string>, planCacheKey: <hexadecimal string>, maxIndexedOrSolutionsReached: <boolean>, maxIndexedAndSolutionsReached: <boolean>, maxScansToExplodeReached: <boolean>, winningPlan: { stage: <STAGE1>, type: <string>, inputStage: { stage: <string>, ... } }, rejectedPlans: [ <candidate plan1>, ] }
A partir de MongoDB 8.0, el campo queryHash existente se duplica en un nuevo campo llamado planCacheShapeHash. Si estás utilizando una versión anterior de MongoDB, solo verás el campo queryHash. Las versiones futuras de MongoDB removerán el campo queryHash obsoleto y deberás utilizar el campo planCacheShapeHash en su lugar.
Para las colecciones particionadas, explain incluye el planificador de queries principal y la información del servidor para cada partición a la que se accede en el campo shards:
{ queryPlanner: { mongosPlannerVersion: <int> winningPlan: { stage: <STAGE1>, type: <string>, shards: [ { shardName: <string>, connectionString: <string>, serverInfo: { ... }, namespace: <string>, indexFilterSet: <boolean>, parsedQuery: { ... }, querySettings: { ... }, planCacheShapeHash: <hexadecimal string>, planCacheKey: <hexadecimal string>, maxIndexedOrSolutionsReached: <boolean>, maxIndexedAndSolutionsReached: <boolean>, maxScansToExplodeReached: <boolean>, winningPlan: { stage: <STAGE1>, type: <string>, inputStage: { stage: <string>, ... } }, rejectedPlans: [ <candidate plan1>, ] } ] } } }
A partir de MongoDB 8.0, el campo queryHash existente se duplica en un nuevo campo llamado planCacheShapeHash. Si estás utilizando una versión anterior de MongoDB, solo verás el campo queryHash. Las versiones futuras de MongoDB removerán el campo queryHash obsoleto y deberás utilizar el campo planCacheShapeHash en su lugar.
explain.queryPlannerContiene información sobre la selección del plan del query por parte del optimizador del query.
explain.queryPlanner.namespaceUna string que especifica el namespace con los nombres de la base de datos y la colección a los que accede la query. El namespace tiene el formato
<database>.<collection>.
explain.queryPlanner.indexFilterSetUn valor booleano que especifica si MongoDB aplicó un filtro de índice para la forma del query de la caché del plan.
explain.queryPlanner.querySettingsSi se establecen las configuraciones de query,
querySettingscontiene detalles sobre las configuraciones del query que se aplican a la forma del query.Para añadir la configuración del query y explorar ejemplos, que incluyen la salida
explain()conquerySettings, se puede consultarsetQuerySettings.Nuevo en la versión 8.0.
explain.queryPlanner.planCacheShapeHashA partir de MongoDB 8.0, el campo
queryHashexistente se duplica en un nuevo campo llamadoplanCacheShapeHash. Si estás utilizando una versión anterior de MongoDB, solo verás el campoqueryHash. Las versiones futuras de MongoDB removerán el campoqueryHashobsoleto y deberás utilizar el campoplanCacheShapeHashen su lugar.Un string hexadecimal que representa el hash de la forma del query de caché del plan y depende solo de las formas del query de la caché del plan.
planCacheShapeHashpuede ayudar a identificar queries lentos (incluido el filtro de query de las operaciones de escritura) con la misma forma del query de la caché del plan.Nota
Como con cualquier función hash, dos formas diferentes de formas del query en caché del plan pueden dar lugar al mismo valor hash. Sin embargo, es poco probable que ocurran colisiones de hash entre diferentes formas del query de la caché del plan.
Para obtener más información sobre
planCacheShapeHashyplanCacheKey, consulte planCacheShapeHash y planCacheKey.
explain.queryPlanner.planCacheKeyUn hash de la clave para la entrada de caché del plan asociada con el query.
A diferencia del
explain.queryPlanner.planCacheShapeHash, elexplain.queryPlanner.planCacheKeyes una función tanto de la forma del query en la caché del plan como de los índices actualmente disponibles para esa forma. Específicamente, si se añaden o eliminan índices que pueden soportar la forma del query, el valorplanCacheKeypuede cambiar, pero el valorplanCacheShapeHashno cambiaría.Para obtener más información sobre
planCacheShapeHashyplanCacheKey, consulte planCacheShapeHash y planCacheKey.
explain.queryPlanner.optimizationTimeMillisTiempo en milisegundos que el planificador del query dedicó a la optimización del query. Este resultado no incluye el tiempo dedicado a optimizar las queries internas
$lookup.
explain.queryPlanner.optimizedPipelineUn valor booleano que indica que toda la operación del pipeline de agregación se ha optimizado y, en su lugar, se ha completado mediante un árbol de etapas de ejecución del plan de queries.
Por ejemplo, la siguiente operación de agregación puede cumplirse mediante el árbol de ejecución del plan del query en lugar de usar el pipeline de agregación.
db.example.aggregate([ { $match: { someFlag: true } } ] ) El campo solo está presente si el valor es
truey solo se aplica para explicar en las operaciones del pipeline de agregación. Cuandotrue, dado que el pipeline fue optimizado, no aparece información sobre la etapa de agregación en la salida.
explain.queryPlanner.winningPlanUn documento que detalla el plan seleccionado por el optimizador del query.
explain.queryPlanner.winningPlan.stageUna string que indica el nombre de la etapa.
Cada etapa consta de información específica de la etapa. Por ejemplo, una etapa
IXSCANincluye los límites del índice junto con otros datos específicos de la exploración del índice. Si una etapa tiene una etapa secundaria o varias etapas secundarias, la etapa tendrá uninputStageoinputStages.Este campo aparece si la operación utilizó el motor de ejecución de query clásico.
explain.queryPlanner.winningPlan.typeSi
stagese establece en"EOF",typees una string que indica el motivo de la etapa EOF:"nonExistentNamespace": indica que el namespace del query no existe."predicateEvalsToFalse": indica que la simplificación de la expresión determina que el query no coincidirá con ningún documento.
explain.queryPlanner.winningPlan.inputStageUn documento que describe la etapa secundaria, que proporciona los documentos o claves de índice a su etapa principal. El campo está presente si la etapa principal tiene solo una secundaria.
explain.queryPlanner.winningPlan.inputStagesUn arreglo de documentos que describen las etapas secundarias. Las etapas secundarias proporcionan los documentos o las claves de índice a la etapa principal. El campo está presente si la etapa principal tiene múltiples nodos secundarios. Por ejemplo, las etapas para expresiones $or podrían consumir entradas de múltiples fuentes.
Este campo aparece si la operación utilizó el motor de ejecución de query clásico.
explain.queryPlanner.winningPlan.isCachedUn valor booleano que indica si el winningPlan está en la caché del plan.
Este campo es
truepara un máximo de un plan entre el plan ganador y los planes rechazados. Si el query no tiene un plan en caché, el campo esfalsepara el plan ganador y los planes rechazados.
explain.queryPlanner.winningPlan.queryPlanUn documento que detalla el plan seleccionado por el optimizador del query. MongoDB presenta el plan como un árbol de etapas.
Este documento aparece si el query utilizó el motor de ejecución de queries basado en slots.
Nuevo en la versión 5.1.
explain.queryPlanner.winningPlan.queryPlan.stageUna string que indica el nombre de la etapa.
Cada etapa consta de información específica para esa etapa. Por ejemplo, una etapa
IXSCANincluye los límites del índice junto con otros datos específicos de la exploración del índice.
explain.queryPlanner.winningPlan.queryPlan.typeSi
stagese establece en"EOF",typees una string que indica el motivo de la etapa EOF:"nonExistentNamespace": indica que el namespace del query no existe."predicateEvalsToFalse": indica que la simplificación de la expresión determina que el query no coincidirá con ningún documento.
explain.queryPlanner.winningPlan.queryPlan.planNodeIdCampo entero único que identifica cada etapa en el plan de ejecución. El campo se incluye en todas las etapas a lo largo de los resultados del
explain.Nuevo en la versión 5.1.
explain.queryPlanner.winningPlan.queryPlan.inputStageSe puede consultar
explain.queryPlanner.winningPlan.inputStage.
explain.queryPlanner.winningPlan.slotBasedPlanDocumento con información sobre el árbol del plan de ejecución del query basado en ranuras y sus etapas. Para uso interno de MongoDB.
Nuevo en la versión 5.1.
explain.queryPlanner.winningPlan.slotBasedPlan.stagesString que incluye información sobre cada etapa en el plan de ejecución del query basado en ranuras, incluyendo el orden de ejecución, las operaciones y las asignaciones de ranuras. Para uso interno de MongoDB.
A partir de MongoDB 8.0, si un query utiliza procesamiento de bloques,
block_to_rowyts_bucket_to_cellblockaparecen en la salidastages.Cambiado en la versión 8.0.
explain.queryPlanner.rejectedPlansArreglo de planes candidatos considerados y rechazados por el optimizador del query. El arreglo puede estar vacío si no hay otros planes candidatos.
Los planes rechazados tienen los mismos campos que
explain.queryPlanner.winningPlan.A partir de MongoDB 8.0, los planes del query rechazados solo contienen la parte
finddel query. En versiones anteriores, los planes rechazados podían incluir etapas de agregación como$group. El planificador del query no utiliza esas etapas de agregación para elegir el plan ganador, por lo que el camporejectedPlanssolo incluye la parte del query que se utilizó para elegir el plan ganador.
executionStats
La información devuelta explain.executionStats detalla la ejecución del plan ganador. Para incluir executionStats en los resultados, se debe ejecutar la explicación en:
Modo de verbosidad de allPlansExecution. Se puede utilizar el modo
allPlansExecutionpara incluir los datos de ejecución parcial capturados durante la selección del plan.
Estos ejemplos pueden combinar las estructuras de salida de los motores de ejecución clásicos y basados en ranuras de MongoDB. No están destinados a ser representativos. La salida puede diferir significativamente.
Para colecciones no particionadas, explain devuelve la siguiente información executionStats:
executionStats: { executionSuccess: <boolean>, nReturned: <int>, executionTimeMillis: <int>, totalKeysExamined: <int>, totalDocsExamined: <int>, executionStages: { stage: <STAGE1> nReturned: <int>, executionTimeMillisEstimate: <int>, opens: <int>, // Starting in MongoDB 5.1 closes: <int>, // Starting in MongoDB 5.1 works: <int>, advanced: <int>, needTime: <int>, needYield: <int>, saveState: <int>, restoreState: <int>, isEOF: <boolean>, ... inputStage: { stage: <STAGE2>, nReturned: <int>, ... numReads: <int>, // Starting in MongoDB 5.1 ... executionTimeMillisEstimate: <int>, ... spills: <long long>, spilledBytes: <long long>, spilledRecords: <long long>, spilledDataStorageSize: <long long>, ... inputStage: { ... } } }, allPlansExecution: [ { nReturned: <int>, executionTimeMillisEstimate: <int>, totalKeysExamined: <int>, totalDocsExamined: <int>, score: <double>, executionStages: { stage: <STAGEA>, nReturned: <int>, executionTimeMillisEstimate: <int>, ... inputStage: { stage: <STAGEB>, ... inputStage: { ... } } } }, ... ] operationMetrics: { cpuNanos: <int>, cursorSeeks: <int>, docBytesRead: <int>, docBytesWritten: <int>, docUnitsRead: <int>, docUnitsReturned: <int>, docUnitsWritten: <int>, idxEntryBytesRead: <int>, idxEntryBytesWritten: <int>, idxEntryUnitsRead: <int>, idxEntryUnitsWritten: <int>, totalUnitsWritten: <int>, keysSorted: <int>, sorterSpills: <int> } }
Para colecciones particionadas, explain incluye las estadísticas de ejecución de cada partición accedida.
executionStats: { nReturned: <int>, executionTimeMillis: <int>, totalKeysExamined: <int>, totalDocsExamined: <int>, executionStages: { stage: <STAGE1> nReturned: <int>, executionTimeMillis: <int>, opens: <int>, // Starting in MongoDB 5.1 closes: <int>, // Starting in MongoDB 5.1 totalKeysExamined: <int>, totalDocsExamined: <int>, totalChildMillis: <NumberLong>, shards: [ { shardName: <string>, executionSuccess: <boolean>, executionStages: { stage: <STAGE2>, nReturned: <int>, executionTimeMillisEstimate: <int>, ... chunkSkips: <int>, inputStage: { stage: <STAGE3>, ... numReads: <int>, // Starting in MongoDB 5.1 ... spills: <long long>, spilledBytes: <long long>, spilledRecords: <long long>, spilledDataStorageSize: <long long>, ... inputStage: { ... } } } }, ... ] } allPlansExecution: [ { shardName: <string>, allPlans: [ { nReturned: <int>, executionTimeMillisEstimate: <int>, totalKeysExamined: <int>, totalDocsExamined:<int>, executionStages: { stage: <STAGEA>, nReturned: <int>, executionTimeMillisEstimate: <int>, ... inputStage: { stage: <STAGEB>, ... inputStage: { ... } } } }, ... ] }, { shardName: <string>, allPlans: [ ... ] }, ... ] }
explain.executionStatsContiene estadísticas que describen la ejecución del query completada para el plan ganador. Para las operaciones de guardado, la ejecución del query completada se refiere a las modificaciones que se realizarían, pero no aplica las modificaciones a la base de datos.
explain.executionStats.nReturnedNúmero de documentos devueltos por el plan del query ganador.
nReturnedcorresponde al campondevuelto porcursor.explain()en versiones anteriores de MongoDB.
explain.executionStats.executionTimeMillisTiempo total en milisegundos requerido para la selección del plan del query y la ejecución del query. Incluye el tiempo que se tarda en ejecutar la fase de prueba del proceso de selección del plan, pero no incluye el tiempo de red necesario para transmitir los datos de vuelta al cliente.
El tiempo reportado por
explain.executionStats.executionTimeMillisno es necesariamente representativo del tiempo real del query. Durante las operaciones en estado estacionario (cuando el plan del query está almacenado en caché), o al usarcursor.hint()concursor.explain(), MongoDB evita el proceso de selección del plan, lo que resulta en un tiempo real más rápido, llevando a un valor menor deexplain.executionStats.executionTimeMillis.
explain.executionStats.totalKeysExaminedNúmero de entradas de índice escaneadas.
explain.executionStats.totalKeysExaminedcorresponde al camponscanneddevuelto porcursor.explain()en versiones anteriores de MongoDB.
explain.executionStats.totalDocsExaminedNúmero de documentos examinados durante la ejecución del query. Las etapas comunes de ejecución del query que examinan documentos son
COLLSCANyFETCH.Nota
explain.executionStats.totalDocsExaminedse refiere al número total de documentos examinados y no al número de documentos devueltos. Por ejemplo, una etapa puede examinar un documento para aplicar un filtro. Si el documento es filtrado, entonces ha sido examinado pero no será devuelto como parte del conjunto de resultados del query.Si un documento se examina varias veces durante la ejecución del query,
explain.executionStats.totalDocsExaminedcuenta cada examen. Es decir,explain.executionStats.totalDocsExaminedno es un conteo del número total de documentos únicos examinados.
explain.executionStats.executionStagesDetalla la ejecución completa del plan ganador como un árbol de etapas; es decir, una etapa puede tener un
inputStageo múltiplesinputStages.A partir de MongoDB 5.1, una etapa puede tener las siguientes etapas de entrada:
thenStageelseStageinnerStageouterStage
Cada etapa consta de información de ejecución específica para esa etapa.
explain.executionStats.executionStages.executionTimeMillisEstimateEl tiempo estimado en milisegundos para la ejecución de la query.
explain.executionStats.executionStages.opensA partir de MongoDB 5.1, el número de veces que se abrió una etapa durante la ejecución del query.
explain.executionStats.executionStages.closesA partir de MongoDB 5.1, el número de veces que se cerró una etapa durante la ejecución del query.
explain.executionStats.executionStages.worksEspecifica el número de "unidades de trabajo" realizadas por la etapa de ejecución del query. La ejecución del query divide su trabajo en pequeñas unidades. Una "unidad de trabajo" puede consistir en examinar una única clave de índice, obtener un único documento de la colección, aplicar una proyección a un único documento o realizar una parte de la contabilidad interna.
Este campo aparece si la operación utilizó el motor de ejecución de query clásico.
explain.executionStats.executionStages.saveStateEl número de veces que la etapa de query suspendió el Procesamiento y guardó su estado de ejecución actual, por ejemplo, en preparación para ceder sus bloqueos.
explain.executionStats.executionStages.restoreStateEl número de veces que la etapa del query realizó la restauración de un estado de ejecución guardado, por ejemplo, recuperando los bloqueos que había cedido anteriormente.
explain.executionStats.executionStages.isEOFEspecifica si la etapa de ejecución ha alcanzado el final del flujo de datos:
Si
trueo1, la etapa de ejecución ha alcanzado el final del flujo.Si
falseo0, la etapa aún puede tener resultados para devolver. Por ejemplo, considere un query con un límite cuyas etapas de ejecución consisten en una etapaLIMITcon una etapa de entrada deIXSCANpara el query. Si el query devuelve más del límite especificado, la etapaLIMITinformaráisEOF: 1, pero su etapa subyacenteIXSCANinformaráisEOF: 0.
explain.executionStats.executionStages.opTypePara las operaciones en colecciones de series de tiempo, el tipo de operación.
explain.executionStats.executionStages.bucketFilterPara operaciones en colecciones de series de tiempo, el filtro se utiliza para reducir el número de grupos de queries en el catálogo de grupos.
explain.executionStats.executionStages.residualFilterPara las operaciones en colecciones de series de tiempo, el filtro utilizado para la query del catálogo de grupos.
explain.executionStats.executionStages.nBucketsUnpackedPara las operaciones en colecciones de series de tiempo, el número de grupos desempaquetados para resolver la operación.
explain.executionStats.executionStages.nMeasurementsDeletedPara operaciones en colecciones de series de tiempo, el número de documentos borrados.
explain.executionStats.executionStages.nMeasurementsInsertedPara las operaciones en colecciones de series de tiempo, el número de documentos insertados.
explain.executionStats.executionStages.nMeasurementsMatchedPara operaciones en colecciones de series de tiempo, el número de documentos coincidentes.
explain.executionStats.executionStages.nMeasurementsModifiedPara las operaciones en colecciones de series de tiempo, el número de documentos modificados.
explain.executionStats.executionStages.nMeasurementsUpsertedPara operaciones en colecciones de series de tiempo, el número de documentos actualizados o insertados.
explain.executionStats.executionStages.inputStageCada
inputStagepuede tener diferentes campos según el valor deinputStage.stage. La siguiente tabla describe los campos posibles y las etapas en las que pueden aparecer.Cada
inputStagepuede tener otroinputStagecomo un campo. Consultar Explicar la estructura de salida.CampoDescripciónEtapas aplicablesdocsExaminedEspecifica el número de documentos escaneados durante la etapa de ejecución de la query.
COLLSCAN,FETCHkeysExaminedPara las etapas de ejecución del query que escanean un índice,
keysExaminedes el número total de claves dentro y fuera de los límites que se examinan durante el proceso de escaneo del índice. Si el escaneo de índice consiste en un único rango contiguo de claves, solo es necesario examinar las claves dentro de los límites. Si los límites del índice consisten en varios rangos de claves, el proceso de ejecución del escaneo del índice puede examinar claves fuera de los límites para saltar desde el final de un rango al inicio del siguiente.IXSCANnumReadsEl número de documentos escaneados o claves de índice examinadas durante la etapa de ejecución del query.
Nuevo en la versión 5.1.
COLLSCAN,IXSCANseeksEl número de veces que tuvimos que mover el cursor del índice a una nueva posición para completar el escaneo del índice.
IXSCANusedDiskSi la etapa guardó en el disco.
Novedades en la versión 5.3.
GROUPspillsEl número de veces que la etapa se volcó al disco.
Nuevo en la versión 8.2.
GROUP,SORTspilledBytesLa cantidad total de datos escrita en el disco en bytes.
Nuevo en la versión 8.2.
GROUP,SORTspilledRecordsEl número total de registros individuales volcados en el disco.
Nuevo en la versión 8.2.
GROUP,SORTspilledDataStorageSizeEl espacio total en el disco, en bytes, utilizado por los datos volcados.
Nuevo en la versión 8.2.
GROUP,SORT
explain.executionStats.allPlansExecutionContiene información parcial de ejecución capturada durante la fase de selección de planes para los planes ganadores y rechazados. El campo solo está presente si
explainse ejecuta en la moda de nivel de verbosidadallPlansExecution.
explain.executionStats.operationMetricsContiene estadísticas de consumo de recursos, siempre y cuando no sean cero. El campo está presente solo si
explainse ejecuta en el nivel de verbosidadexecutionStatso superior y siprofileOperationResourceConsumptionMetricsestá habilitado.Advertencia
MongoDB 8.2 remueve
profileOperationResourceConsumptionMetrics. Por lo tanto, el código que depende de operationMetrics no funciona.
serverInfo
Para las colecciones no particionadas, explain devuelve la siguiente información serverInfo para la instancia de MongoDB:
serverInfo: { host: <string>, port: <int>, version: <string>, gitVersion: <string> }
Para las colecciones particionadas, explain devuelve el serverInfo para cada partición a la que se accede y un objeto serverInfo de nivel superior para el mongos.
queryPlanner: { ... winningPlan: { stage: <STAGE1>, shards: [ { shardName: <string>, connectionString: <string>, serverInfo: { host: <string>, port: <int>, version: <string>, gitVersion: <string> }, ... } ... ] } }, serverInfo: { // serverInfo for mongos host: <string>, port: <int>, version: <string>, gitVersion: <string> } ...
Estadísticas del plan de ejecución para la consulta con $lookup la etapa de canalización
Nuevo en la versión 5.0.
Los resultados de explain pueden incluir estadísticas de ejecución para queries que utilizan una etapa de $lookup del pipeline. Para incluir esas estadísticas de ejecución, se debe Ejecutar la Operación 'explain' en uno de estos niveles de verbosidad de ejecución:
Los siguientes campos se incluyen en los resultados de explicación para un query $lookup :
'$lookup': { from: <string>, as: <string>, localField: <string>, foreignField: <string> }, totalDocsExamined: <long>, totalKeysExamined: <long>, collectionScans: <long>, indexesUsed: [ <string_1>, <string_2>, ..., <string_n> ], executionTimeMillisEstimate: <long>
Para ver las descripciones de los campos en la sección $lookup, consulte la página $lookup.
Los otros campos son:
explain.collectionScansNúmero de veces que se produjo un escaneo de colección durante la ejecución del query. Durante un escaneo de colección, cada documento en una colección se compara con el predicado del query. Los escaneos de colección ocurren si no existe un índice apropiado que cubra el query.
Estadísticas de los planes de ejecución para consultas de búsqueda
Nuevo en la versión 8.1.
Los resultados de la explicación incluyen estadísticas de ejecución para las queries que utilizan una etapa del pipeline $search, $searchMeta o $vectorSearch. Para incluir estadísticas de ejecución para las consultas de búsqueda, se debe ejecutar el comando explain en uno de los siguientes modos de nivel de verbosidad de ejecución:
MongoDB devuelve estadísticas de ejecución para consultas de búsqueda y búsqueda vectorial que utilizan únicamente el motor clásico.
Para aprender más sobre los resultados de los queries de búsqueda y de búsqueda vectorial, consultar:
Escaneo de colección
Si el planificador de queries selecciona un escaneo de colección, el resultado de explain incluye una etapa COLLSCAN.
Si el planificador del query selecciona un índice, el resultado de la explicación incluye una etapa IXSCAN. La etapa incluye información como el patrón de claves del índice, la dirección de recorrido y los límites del índice.
A partir de MongoDB 5.3, si el planificador de queries selecciona un índice clusterizado para una colección con índice clusterizado y el query contiene límites que definen la parte del índice a buscar, el resultado de explain incluye una etapa CLUSTERED_IXSCAN. La etapa incluye información sobre la clave del índice agrupado y los límites del índice.
Si el planificador de query selecciona un índice agrupado para una colección con índice clusterizado y la query no contiene límites, la query realiza un escaneo de colección sin límites y el resultado de explain incluye una etapa COLLSCAN.
Nota
El parámetro notablescan no permite queries ilimitados que utilizan un índice agrupado porque los queries requieren un escaneo de colección completo.
Para aprender más sobre las estadísticas de ejecución de los escaneos de colección, se puede consultar Interpretar los resultados del plan de ejecución.
Consultas cubiertas
Cuando un índice cubre un query, MongoDB puede tanto hacer coincidir las condiciones del query como devolver los resultados utilizando solo las claves del índice. MongoDB no necesita examinar documentos de la colección para realizar ninguna parte del query.
Cuando un índice cubre un query, el resultado de la explicación tiene una etapa IXSCAN que no es descendiente de una etapa FETCH, y en el executionStats, el explain.executionStats.totalDocsExamined es 0.
$or expresión
Si MongoDB utiliza índices para una expresión $or, el resultado incluirá la etapa OR con un arreglo explain.queryPlanner.winningPlan.inputStages que detalla los índices; por ejemplo:
{ stage: 'OR', inputStages: [ { stage: 'IXSCAN', ... }, { stage : 'IXSCAN', ... }, ... ] }
En versiones anteriores de MongoDB, cursor.explain() devolvía el arreglo clauses que detallaba los índices.
$sort y $group Etapas
Cuando explain se ejecuta en moda de nivel de verbosidad executionStats o allPlansExecution, las etapas $sort y $group tienen salida adicional.
Etapa | Campo | Tipo | Descripción |
|---|---|---|---|
| long | Un número estimado de bytes procesados en la etapa | |
| booleano | Si la etapa | |
| long long | El número de veces que la etapa | |
| long long | Una estimación del número de bytes escritos en el disco en la etapa de | |
| long long | El número total de registros individuales volcados en el disco. | |
| long long | El espacio total en el disco, en bytes, utilizado por los datos volcados. | |
| booleano | Si la etapa | |
| long long | El número de veces que la etapa | |
| long long | Una estimación del número de bytes escritos en el disco en la etapa de | |
| long long | El número total de registros individuales volcados en el disco. | |
| long long | El espacio total en el disco, en bytes, utilizado por los datos volcados. |
Etapa de ordenamiento
Si MongoDB no puede utilizar un índice o índices para obtener el orden de clasificación, los resultados incluyen una etapa SORT que indica una operación de clasificación en memoria. Si el plan de ejecución no contiene una etapa explícita SORT, entonces MongoDB utilizó un índice para obtener el orden de clasificación.
Hash de forma del query
A partir de MongoDB 8.0, explain genera el siguiente campo:
explain.queryShapeHashUna string hexadecimal que representa el hash de la forma del query. Para aprender más, se puede consultar Formas del query.
Nuevo en la versión 8.0.