Analisar a execução de consultas com o Query Explain
Esta página descreve como recuperar informações de execução de consultas ao executar uma consulta.
Usar o Query Explain
Use o Query Explain para entender como suas consultas estão sendo executadas. Isso fornece detalhes que podem ser usados para otimizar suas consultas.
É possível usar a explicação de consultas no console Google Cloud ou com o comando explain.
Console
Execute uma consulta no Editor de consultas e abra a guia Explicação:
-
No console do Google Cloud , acesse a página Bancos de dados.
- Na lista de bancos de dados, selecione um banco de dados do Firestore com compatibilidade com o MongoDB. O console Google Cloud abre o Firestore Explorer para esse banco de dados.
- Insira uma consulta no editor e clique em Executar.
-
Clique na guia Explicação para conferir a saída da análise de consulta.
API MongoDB
A explicação de consultas na API MongoDB é compatível com o comando
explain
que pode ser usado em ferramentas como o Mongo Shell e o Compass.
O comando explain é compatível com os comandos aggregate, find, distinct e count. Por exemplo:
db.collection.explain('executionStats').find(...)
Você também pode usar o método explain(), por exemplo:
db.collection.find({QUERY}).explain('executionStats')Limitações
Observe as seguintes limitações e diferenças:-
O Query Explain não é compatível com comandos que retornam um cursor. Por exemplo, não é possível invocar a explicação chamando o seguinte comando diretamente:
db.collection.aggregate(..., explain: true)
A explicação de consultas só é compatível com os comandos
find,aggregate,count,distinct,update,deleteefindAndModify.-
A explicação de consultas é compatível com os modos de detalhamento
executionStats,allPlansExecutionequeryPlanner.queryPlanner: retorna apenas o plano de execução, sem executar a consulta.executionStatseallPlansExecution: retornam o plano de execução com estatísticas de faturamento, memória e execução.
Se nenhum modo de verbosidade for especificado, o shell vai usar
queryPlannercomo padrão. Para conferir as estatísticas de execução completas, especifique o modo de detalhamentoexecutionStatsouallPlansExecution.
Análise
A saída do Query Explain contém dois componentes principais: as estatísticas de resumo e a árvore de execução. Considere esta consulta como exemplo:
db.orders.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
Estatísticas de resumo
A parte de cima da saída explicada contém um resumo das estatísticas de execução. Use essas estatísticas para determinar se uma consulta tem alta latência ou custo. Além disso, contém estatísticas de memória que informam se a consulta está próxima dos limites de memória.
Execution:
results returned: 35
query id: 7e7b37ea1a259d79
request peak memory usage: 45.56 KiB (46,656 B)
data bytes read: 24.58 KiB (25,175 B)
entity row scanned: 265
Billing:
read units: 7
Á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) recuperam dados da camada de armazenamento, que percorre a árvore para gerar uma resposta de consulta.
Para detalhes sobre cada nó de execução, consulte a Referência de execução.
Para saber como usar essas informações para otimizar suas consultas, consulte Otimizar a execução de consultas.
Confira um exemplo de árvore de execução:
Execution:
results returned: 35
query id: 7e7b37ea1a259d79
request peak memory usage: 45.56 KiB (46,656 B)
data bytes read: 24.58 KiB (25,175 B)
entity row scanned: 265
Billing:
read units: 7
Tree:
• Compute
| $out_1: map_set($record_1, "__id__", $__id___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 35
| latency: 204.87 ms (local 7.64 ms)
|
└── • Compute
| $__id___1: _id($__key___2)
|
| Execution:
| records returned: 35
| latency: 197.23 ms (local 2.04 ms)
|
└── • MajorSort
| fields: [$v_5 ASC]
| output: [$__key___2, $record_1]
|
| Execution:
| records returned: 35
| latency: 195.20 ms (local 28.42 ms)
| peak memory usage: 45.56 KiB (46,656 B)
|
└── • Compute
| $v_5: offset($v_4, 0L)
|
| Execution:
| records returned: 35
| latency: 166.78 ms (local 14.84 ms)
|
└── • Compute
| $v_4: sortPaths(array($date_placed_1), [date_placed ASC])
|
| Execution:
| records returned: 35
| latency: 151.94 ms (local 5.43 ms)
|
└── • TableScan
source: **/orders
order: STABLE
filter: $eq($user_id_1, 1,234)
output bindings: {$__key___2=row().__key__, $date_placed_1=row().date_placed, $record_1=row[* - { __create_time__, __update_time__ }](), $user_id_1=row().user_id}
output: [$__key___2, $date_placed_1, $record_1]
Execution:
records returned: 35
latency: 146.50 ms
data bytes returned: 3.25 KiB (3,325 B)
post-filtered rows: 230
records scanned: 265
data bytes read: 24.58 KiB (25,175 B)
A seguir
- 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 suas consultas, consulte Otimizar a execução de consultas.