Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / / / /

Explicar queries lentas

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.

O método explain() está disponível para queries que utilizam os seguintes métodos:

  • aggregate()

  • count()

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

Analisador de query do Atlas

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.

1

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" ] }
} )
2

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.

3

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.

4

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.

5

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 de nReturned, 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 e nReturned tiverem os mesmos valores, isso indica que o MongoDB examinou apenas os documentos que devolveu. Isso indica um índice efetivo.

Voltar

Interpretar os resultados

Nesta página