Questa pagina descrive come recuperare le informazioni sull'esecuzione delle query quando esegui una query.
Utilizza Spiegazione query
Utilizza Query Explain per capire come vengono eseguite le query. In questo modo, puoi ottenere dettagli che puoi utilizzare per ottimizzare le query.
Puoi utilizzare Query Explain tramite la console Firebase o le librerie client server di Firestore.Console
-
Nella console Firebase, vai a Database e spazio di archiviazione > Firestore > Dati > Editor di query.
- Esegui la query per cui vuoi ottenere informazioni sull'esecuzione.
- Fai clic sulla scheda Query Explain per visualizzare l'output dell'analisi della query.
Node.js (Admin)
import { field } from '@google-cloud/firestore/pipelines';
const q = db.pipeline() .collection('/users') .sort(field('status').ascending()) .limit(100); let results; try { results = await q.execute({ explainOptions: { mode: 'analyze', outputFormat: 'text' } }); } catch (error) { console.log(error); } const metrics = results?.explainStats?.text; console.log(metrics);
Java (Admin)
Pipeline q = db.pipeline() .collection("/users") .sort(field("status").ascending()) .limit(100); PipelineExecuteOptions pipelineOpts = new PipelineExecuteOptions().withExplainOptions( new ExplainOptions().withExecutionMode(ExplainOptions.ExecutionMode.ANALYZE) ); Pipeline.Snapshot result = q.execute(pipelineOpts).get(); String metrics = null; if (result.getExplainStats() != null) { metrics = result.getExplainStats().getText(); System.out.println(metrics); }
Modalità Spiega
A seconda di ciò di cui vuoi eseguire il debug, puoi eseguire una query con Query Explain in diverse modalità:
analyze: pianifica ed esegue la query. Restituisce informazioni sul planner, statistiche di esecuzione del runtime e metriche, oltre ai risultati regolari prodotti dalla query.explain: pianifica la query, ma non la esegue. Restituisce le informazioni dello strumento di pianificazione, ma non le statistiche, le metriche o i risultati di runtime. Questo è utile per eseguire il debug del comportamento di una query senza eseguire operazioni costose.stats: pianifica ed esegue la query, ma non restituisce risultati. Restituisce informazioni sul planner, statistiche di esecuzione del runtime e metriche.
Analisi
L'output di Query Explain contiene due componenti principali: le statistiche di riepilogo e l'albero di esecuzione. Considera questa query come esempio:
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
Statistiche di riepilogo
La parte superiore dell'output spiegato contiene un riepilogo delle statistiche di esecuzione. Utilizza queste statistiche per determinare se una query ha una latenza o un costo elevati. Contiene anche statistiche sulla memoria che ti consentono di sapere quanto la tua query è vicina ai limiti di memoria.
Execution:
results returned: 2
request peak memory usage: 20.25 KiB (20,736 B)
data bytes read: 148 B
entity row scanned: 2
Billing:
read units: 1
Albero di esecuzione
L'albero di esecuzione descrive l'esecuzione della query come una serie di nodi. I nodi inferiori (nodi foglia) recuperano i dati dal livello di archiviazione, che risale l'albero per generare una risposta alla query.
Per informazioni dettagliate su ciascun nodo di esecuzione, consulta il riferimento per l'esecuzione.
Per informazioni dettagliate su come utilizzare queste informazioni per ottimizzare le query, consulta Ottimizza l'esecuzione delle query.
Di seguito è riportato un esempio di albero di esecuzione:
Tree:
• Compute
| $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 2
| latency: 5.96 ms (local <1 ms)
|
└── • Compute
| $__name___1: map_get($record_1, "__key__")
|
| Execution:
| records returned: 2
| latency: 5.88 ms (local <1 ms)
|
└── • MajorSort
| fields: [$v_1 ASC]
| output: [$record_1]
| limit: 100
|
| Execution:
| records returned: 2
| latency: 5.86 ms (local <1 ms)
| peak memory usage: 20.25 KiB (20,736 B)
|
└── • Compute
| $v_1: map_get($record_1, "status")
|
| Execution:
| records returned: 2
| latency: 5.23 ms (local <1 ms)
|
└── • TableScan
source: /users
order: UNDEFINED
properties: *
row range: (-∞..+∞)
output record: $record_1
variables: [$record_1]
Execution:
records returned: 2
latency: 4.68 ms
records scanned: 2
data bytes read: 148 B
Passaggi successivi
- Per scoprire di più sui nodi dell'albero di esecuzione, consulta il Riferimento per l'esecuzione delle query.
- Per scoprire come ottimizzare le query, consulta Ottimizza l'esecuzione delle query.