O método explain()
fornece informações sobre como o MongoDB planeja e executa a query fornecida. Você pode achar essas informações úteis ao solucionar problemas de desempenho da query e planejar otimizações.
Sobre esta tarefa
Explicar queries
O método explain()
está disponível para queries que utilizam os seguintes métodos:
Analisadores
Esta tarefa executa o método explain()
em uma query de amostra em uma tentativa de identificar problemas de desempenho. Na prática, pode ser difícil executar o explain()
em cada query que seu aplicação executa.
Para restringir a lista de queries a serem analisadas apenas aquelas que são lentas, você pode usar um profiler:
Profiler | Descrição |
---|---|
Fornece um gráfico de dispersão para os clientes do Atlas , facilitando a identificação de queries lentas e outliers de desempenho. | |
Armazena informações de desempenho de query em uma collection, permitindo que você consulte o MongoDB para queries com problemas específicos de desempenho. |
Tanto o Atlas Query Profiler quanto o profiler de banco de dados podem afetar o desempenho do servidor , usar espaço em disco e expor metadados de query em torno de campos criptografados. Considere as implicações de desempenho e segurança antes de habilitá-las.
Passos
Explique a query.
Execute a query que você deseja avaliar com o método explain()
:
db.movies.explain( "executionStats").find( { year: { $gt: 1990 }, rated: { $in: [ "PG", "PG-13" ] } } )
Avalie o tempo de execução.
Marque o campo explain.executionStats.executionTimeMillis
para ver o tempo de execução em milissegundos. Isso mostra o tempo total, incluindo o tempo necessário para criar e selecionar um plano de query , além do tempo necessário para a execução do plano.
Se o tempo de execução estiver dentro de um período aceitável para as necessidades do seu aplicação e banco de dados , nenhuma otimização será necessária.
Se o tempo de execução estiver acima de um período aceitável, será necessária uma análise adicional para determinar por que a query demora tanto para ser executada.
Avalie as etapas de execução.
As queries podem ser executadas em vários estágios. Em cada estágio, o MongoDB coleta documentos do estágio anterior para executar o próximo conjunto de operações. explain.executionStats.executionStages
fornece informações sobre cada estágio de execução, onde cada nível do campo inputStage
mostra como o MongoDB selecionou documentos para o estágio.
Marque o campo inputStage.stage
para cada estágio de execução:
COLLSCAN
- Indica que o MongoDB executou uma verificação de collection.
IXSCAN
- Indica que o MongoDB executou uma verificação de índice.
FETCH
Indica que o MongoDB obteve documentos completos do banco de dados.
Se a query retornar um pequeno número de campos e o aplicação não gravar intensivamente nessa collection, considere adicionar índices para cobrir a query. Isso permite que o MongoDB busque os valores de campo do índice em vez de ler o documento completo.
Para mais informações, consulte Executar queries cobertas.
PROJECTION
- Indica campos de retorno filtrados do MongoDB na memória.
SORT
- Indica que o MongoDB classificou os documentos na memória ou usou um índice coberto.
As queries que executam operações de filtro ou classificação que mostram um estágio COLLSCAN
se beneficiariam de um índice.
Para mais informações, consulte Criar um Índice.
Avaliar exame chave.
As queries de collections com índices podem não fazer uso efetivo dos índices.
Compare o número de chaves examinadas com o número de documentos examinados. Se o número de chaves for significativamente menor que o número de documentos, isso indica que os índices foram ineficazes.
Verifique os valores totais para a query e certifique-se de que executionStats.totalDocsExamined
não mostre um valor superior a executionStats.totalKeysExamined
.
If o número de chaves examinadas for muito menor do que o número de documentos examinados, verifique cada estágio no campo executionStages
, comparando keysExamined
e docsExamined
para determinar qual estágio falhou ao usar o índice. Em seguida, crie um índice para acomodar a query nesse estágio.
Avalie o filtro.
As queries que usam filtros para especificar os resultados podem ter problemas. Para identificar um filtro ineficiente, compare o valor no campo executionStats.totalDocsExamined
com o do campo executionStats.nReturned
.
Se
totalDocsExamined
tiver um valor muito maior que o denReturned
, isso indica um índice ineficaz. Ou seja, o MongoDB precisou verificar a coleta para filtrar os resultados.Crie um índice nos campos de filtro para melhorar o desempenho.
Se
totalDocsExamined
enReturned
tiverem os mesmos valores, isso indica que o MongoDB examinou apenas os documentos que devolveu. Isso indica um índice efetivo.