Definición
explainEl comando
explainproporciona información sobre la ejecución de los siguientes comandos:aggregate,count,distinct,find,findAndModify,delete,mapReduceyupdate.Tip
mongoshEn, este comando también se puede ejecutar a través de los métodos auxiliaresdb.collection.explain()cursor.explain()y.Los métodos auxiliares son convenientes para
mongoshlos usuarios de, pero es posible que no devuelvan el mismo nivel de información que los comandos de la base de datos. En los casos en que no se necesite la conveniencia o se requieran los campos de retorno adicionales, utilice el comando de la base de datos.Nota
El uso de
explainignora todas las entradas existentes en la caché del plan e impide que el planificador de query de MongoDB cree una nueva entrada en la caché del plan.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre la compatibilidad de Atlas con todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Acceso requerido
Para usar explain, se debe tener permiso para ejecutar el comando subyacente.
Sintaxis
El comando tiene la siguiente sintaxis:
db.runCommand( { explain: <command>, verbosity: <string>, comment: <any> } )
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| Documento | |
| string | Opcional. Una cadena que especifica el modo en el que se ejecutará. El modo Las modas posibles son:
Para obtener más información sobre los modos, consulte la sección "Explicar comportamiento". |
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). Si especificas |
Nota
El nivel de verbosidad por defecto de explain y db.collection.explain() difiere. explain tiene como valor por defecto allPlansExecution, mientras que db.collection.explain() tiene como valor por defecto queryPlanner.
Comportamiento
Modas de nivel de verbosidad
El comportamiento de y la cantidad de información devuelta dependen explain del verbosity modo.
MongoDB ejecuta el optimizador de consultas para elegir el plan ganador para la operación que se está evaluando. explain devuelve la información queryPlanner para la <command> evaluada.
MongoDB ejecuta el optimizador del query para elegir el plan ganador, ejecuta el plan ganador hasta su finalización y devuelve estadísticas que describen la ejecución del plan ganador.
Para las operacionesexplain de escritura, devuelve información sobre las operaciones de actualización o eliminación que se realizarían, pero no aplica las modificaciones a la base de datos.
explain devuelve la información y para queryPlanner executionStats el <command> evaluado. Sin embargo, no proporciona información de ejecución de consulta para los planesexecutionStats rechazados.
Por defecto, se ejecutaexplain en "allPlansExecution" modo de verbosidad.
MongoDB ejecuta el optimizador de la query para elegir el plan ganador y ejecuta el plan ganador hasta su finalización. En el modo "allPlansExecution" MongoDB devuelve estadísticas que describen la ejecución del plan ganador, así como estadísticas de los otros planes candidatos capturados durante la selección del plan.
Para las operacionesexplain de escritura, devuelve información sobre las operaciones de actualización o eliminación que se realizarían, pero no aplica las modificaciones a la base de datos.
explain devuelve la queryPlanner executionStats información y para la <command> evaluada. El executionStats incluye la información completa de ejecución de la consulta para el plan ganador.
Si el optimizador del query consideró más de un plan, la información de executionStats también incluye la información de ejecución parcial capturada durante la fase de selección del plan tanto para los planes ganadores como para los rechazados.
Explica y guarda Operaciones
Para las operaciones de escritura, el explain comando devuelve información sobre la operación de escritura que se realizaría, pero en realidad no modifica la base de datos.
Stable API
La Stable API V1 admite los siguientes modos de verbosidad para el comando explain:
Advertencia
MongoDB no garantiza ningún formato de salida específico del comando, incluso cuando se utiliza la API explain estable.
Restricciones
No puede ejecutar el explain comando /db.collection.explain() en executionStats modo o allPlansExecution modo para un que aggregation pipeline $out contenga la etapa. En su lugar, puede:
ejecutar la explicación en
queryPlannermoda o
Salida
explain Las operaciones pueden devolver información sobre:
explainVersion, la versión del formato de salida (por ejemplo,"1").command, que detalla el comando que se está explicando.queryShapeHash, comenzando en MongoDB 8.0, que es una string hexadecimal con el hash de una forma del query. Para obtener detalles, consulta Formas del query, Hash de Forma del query yexplain.queryShapeHash.queryPlanner, que detalla el plan seleccionado por el optimizador del query y enumera los planes rechazados.executionStats, que detalla la ejecución del plan ganador y de los planes rechazados.serverInfo, que proporciona información sobre la instancia de MongoDB.serverParameters, que detalla los parámetros internos.
El nivel de verbosidad (es decir, queryPlanner, executionStats, allPlansExecution) determina si los resultados incluyen executionStats y si executionStats incluye datos capturados durante la selección del plan.
La salida de la explicación está limitada por la profundidad máxima de anidación para documentos BSON, que es de 100 niveles de anidación. Explicar que la salida que excede el límite se trunca.
Para obtener más detalles sobre la salida, consultar Explicación de resultados.
Ejemplos
queryPlanner Modo
El siguiente comando se ejecuta explain en "queryPlanner" modo de verbosidad para devolver la información de planificación de la consulta para un count comando:
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "queryPlanner" } )
executionStats Modo
La siguiente operación se ejecuta explain en "executionStats" modo de verbosidad para devolver la información de planificación y ejecución de la consulta count para un comando:
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "executionStats" } )
allPlansExecution Modo
Por defecto, explainse ejecuta en modo "allPlansExecution" de detalle. El siguiente comandoexplaindevuelvequeryPlanneryexecutionStatspara todos los planes considerados para un comandoupdate:
Nota
La ejecución de esta explicación no modificará los datos, pero ejecuta el predicado de query de la operación de actualizar. Para los planes candidatos, MongoDB devuelve la información de ejecución capturada durante la fase de selección del plan.
db.runCommand( { explain: { update: "products", updates: [ { q: { quantity: 1057, category: "apparel" }, u: { $set: { reorder: true } } } ] } } )