Definição
explainO comando
explainfornece informações sobre a execução dos seguintes comandos:aggregate,count,distinct,find,findAndModify,delete,mapReduceeupdate.Dica
mongoshEm, esse comando também pode ser executado por meio dos métodos e assistentedb.collection.explain()cursor.explain().Os métodos auxiliares são convenientes para os
mongoshusuários, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados . Nos casos em que a conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.Observação
Usar
explainignora todas as entradas de cache do plano existentes e evita que o planejador de query do MongoDB crie uma nova entrada de cache do plano.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Acesso necessário
Para utilizar o explain, você deve ter permissão para executar o comando subjacente.
Sintaxe
O comando tem a seguinte sintaxe:
db.runCommand( { explain: <command>, verbosity: <string>, comment: <any> } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
|---|---|---|
| documento | |
| string | Opcional. Uma string que especifica o modo no qual executar. O modo Os modos possíveis são:
Para mais informações sobre os modos, consulte explicar comportamento. |
| any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). Se você especificar |
Observação
O detalhamento padrão de explain e db.collection.explain() difere. explain o padrão é allPlansExecution enquanto db.collection.explain() o padrão é queryPlanner.
Comportamento
Modos de Verbosidade
O comportamento de e a quantidade de informações retornadas dependem explain do verbosity modo .
O MongoDB executa o otimizador de query para escolher o plano vencedor para a operação em avaliação. explain retorna as informações para queryPlanner o <command> avaliado.
O MongoDB executa o otimizador de query para escolher o plano vencedor, executa o plano vencedor até a conclusão e retorna estatísticas que descrevem a execução do plano vencedor.
Para operações de gravação, o retorna informações sobre asexplain operações de atualização ou exclusão que seriam executadas, mas não aplica as modificações no banco de dados.
explain retorna as queryPlanner executionStats informações e para o <command> avaliado. No entanto, executionStats o não fornece informações de execução da query para os planos rejeitados.
Por padrão, o executaexplain no "allPlansExecution" modo de verbosidade do.
O MongoDB executa o otimizador de query para escolher o plano vencedor e executar o plano vencedor para conclusão. No modo "allPlansExecution", MongoDB retorna estatísticas descrevendo a execução do plano vencedor, bem como estatísticas para os outros planos candidatos capturados durante a seleção do plano.
Para operações de gravação, o retorna informações sobre asexplain operações de atualização ou exclusão que seriam executadas, mas não aplica as modificações no banco de dados.
explain retorna as queryPlanner executionStats informações e para o <command> avaliado. O executionStats inclui as informações de execução da query concluídas para o plano vencedor.
Se o otimizador de query considerar mais de um plano, as informaçõesexecutionStats também incluirão as informações de execução parcial capturadas durante a fase de seleção do plano para os planos de candidatos vencedores e rejeitados.
Operações de explicação e gravação
Para operações de gravação, o explain comando retorna informações sobre a operação de gravação que seria executada, mas na verdade não modifica o banco de dados.
Stable API
A API estável V1 aceita os seguintes modos de verbosidade para o comando explain:
Aviso
O MongoDB não garante nenhum formato de saída específico do comando, mesmo ao usar a API explain estável.
Restrições
Você não pode executar o explain comando /db.collection.explain() no executionStats modo ou no allPlansExecution modo para um que aggregation pipeline $out contém o estágio. Em vez disso, você pode:
executar a explicação no modo
queryPlannerou
Saída
explain as operações podem retornar informações sobre:
explainVersion, a versão do formato de saída (por exemplo,"1").command, que detalha o comando a ser explicado.queryPlanner, que detalha o plano selecionado pelo otimizador de query e lista os planos rejeitados.executionStats, que detalha a execução do plano vencedor e os planos rejeitados.serverInfo, que fornece informações sobre a instância MongoDB.serverParameters, que detalha os parâmetros internos.
O modo de verbosidade (ou seja, queryPlanner, executionStats, allPlansExecution) determina se os resultados incluem executionStats e se executionStats inclui dados capturados durante a seleção do plano.
A saída de explicação é limitada pela profundidade máxima aninhada para documentos BSON, que é de 100 níveis de aninhamento. A saída de explicações que excede o limite é truncada.
Para obter detalhes sobre o resultado, consulte Explicar os resultados.
Exemplos
queryPlanner Modo
O seguinte comando é executado explain no "queryPlanner" modo de verbosidade para retornar as informações de planejamento de query para um count comando:
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "queryPlanner" } )
executionStats Modo
A seguinte operação do é executada explain no "executionStats" modo de verbosidade para retornar as informações de planejamento e execução da query para um count comando:
db.runCommand( { explain: { count: "products", query: { quantity: { $gt: 50 } } }, verbosity: "executionStats" } )
allPlansExecution Modo
Por padrão, o executaexplain no "allPlansExecution" modo de verbosidade do. O comando a seguir explain retorna o queryPlanner e executionStats o update para todos os planos considerados para um comando:
Observação
A execução desta explicação não modificará os dados, mas executará o predicado de query da operação de atualização. Para planos candidatos, o MongoDB retorna as informações de execução capturadas durante a fase de seleção do plano.
db.runCommand( { explain: { update: "products", updates: [ { q: { quantity: 1057, category: "apparel" }, u: { $set: { reorder: true } } } ] } } )