Analise a execução de consultas com a explicação de consultas
Esta página descreve como obter informações de execução de consultas quando executa uma consulta.
Use a explicação de consultas
Pode usar a explicação de consultas para compreender como as suas consultas estão a ser executadas. Isto fornece detalhes que pode usar para otimizar as suas consultas.
Pode usar o comando Query Explain através da Google Cloud consola ou do comando explain
.
Consola
Execute uma consulta no editor de consultas e abra o separador Explicação:
-
Na Google Cloud consola, aceda à página Bases de dados.
- Na lista de bases de dados, selecione uma base de dados do Firestore com compatibilidade com o MongoDB. A Google Cloud consola abre o Explorador do Firestore para essa base de dados.
- Introduza uma consulta no editor de consultas e clique em Executar.
-
Clique no separador Explicação para ver o resultado da análise de consultas.
API MongoDB
A consulta Explain na API MongoDB é suportada através do comando
explain
que pode usar em ferramentas como o Mongo Shell e o Compass.
O comando explain
é suportado com os comandos aggregate
, find
, distinct
e count
. Por exemplo:
db.collection.explain('executionStats').find(...)
Também pode usar o método explain()
, por exemplo:
db.collection.find({QUERY}).explain('executionStats')
Limitações
Tenha em atenção as seguintes limitações e diferenças:-
O comando Explain da consulta não suporta comandos que devolvem um cursor. Por exemplo, não é suportado invocar a funcionalidade de explicação chamando diretamente o seguinte comando:
db.collection.aggregate(..., explain: true)
O comando Query Explain só é suportado nos comandos
find
,aggregate
,count
edistinct
.-
As opções
Verbosity
eComment
de Query Explain não são suportadas através da API MongoDB. O comportamento corresponde à opçãoexecutionStats
. As opçõesallPlansExecution
equeryPlanner
são ignoradas, se forem fornecidas.Se não for fornecida nenhuma verbosidade, a shell usa a
queryPlanner
verbosidade e filtra as estatísticas de execução. Tem de usar a verbosidadeexecutionStats
ouallPlansExecution
para ver o resultado completo.
Análise
O resultado do comando Query Explain contém dois componentes principais: as estatísticas de resumo e a árvore de execução. Considere esta consulta como exemplo:
db.order.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
Estatísticas de resumo
A parte superior da saída explicada contém um resumo das estatísticas de execução. Use estas estatísticas para determinar se uma consulta tem uma latência ou um custo elevado. Também contém estatísticas de memória que lhe indicam a proximidade da sua consulta aos limites de memória.
Billing Metrics:
read units: 1
Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1
Árvore de execução
A árvore de execução descreve a execução da consulta como uma série de nós. Os nós inferiores (nós folha) obtêm dados da camada de armazenamento que percorre a árvore para cima para gerar uma resposta à consulta.
Para ver detalhes sobre cada nó de execução, consulte a referência de execução.
Para ver detalhes sobre como usar estas informações para otimizar as suas consultas, consulte o artigo Otimize a execução de consultas.
Segue-se um exemplo de uma árvore de execução:
• Compute
| $out_1: map_set($record_1, "__id__", $__id___1, "__key__", $__key___1, "__row_id__", $__row_id___1, "__$0__", $__$0___2)
| is query result: true
|
| Execution:
| records returned: 1
|
└── • Compute
| $__$0___2: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__key___1: UNSET
| $__row_id___1: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__id___1: _id($record_1.__key__)
|
| Execution:
| records returned: 1
|
└── • MajorSort
| fields: [$v_5 ASC]
| output: [$record_1]
|
| Execution:
| records returned: 1
| peak memory usage: 4.00 KiB (4,096 B)
|
└── • Compute
| $v_5: array_get($v_4, 0L)
|
| Execution:
| records returned: 1
|
└── • Compute
| $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])
|
| Execution:
| records returned: 1
|
└── • Filter
| expression: $eq($user_id_1, 1,234)
|
| Execution:
| records returned: 1
|
└── • TableScan
source: **/my_collection
order: STABLE
properties: * - { __create_time__, __update_time__ }
output record: $record_1
output bindings: {$user_id_1=user_id}
variables: [$record_1, $user_id_1]
Execution:
records returned: 1
records scanned: 1
O que se segue?
- Para saber mais sobre os nós da árvore de execução, consulte a referência de execução de consultas.
- Para saber como otimizar as suas consultas, consulte o artigo Otimize a execução de consultas.