Questa pagina descrive come recuperare le informazioni sull'esecuzione delle query quando esegui una query.
Utilizzare Spiegazione query
Puoi utilizzare Spiegazione query per capire come vengono eseguite le tue query. Fornisce dettagli che puoi utilizzare per ottimizzare le query.
Puoi utilizzare Spiegazione query tramite la console Google Cloud o il comando explain.
Console
Esegui una query nell'editor di query e apri la scheda Spiegazione:
-
Nella console Google Cloud, vai alla pagina Database.
- Dall'elenco dei database, seleziona un database Cloud Firestore. La console Google Cloud apre Firestore Explorer per quel database.
- Inserisci una query nell'editor di query e fai clic su Esegui.
-
Fai clic sulla scheda Spiegazione per visualizzare l'output dell'analisi della query.
API MongoDB
Spiegazione query nell'API MongoDB è supportata tramite il
explain
comando, che puoi utilizzare in strumenti come Mongo Shell e Compass.
Il comando explain è supportato con i comandi aggregate, find, distinct e count, ad esempio:
db.collection.explain('executionStats').find(...)
Puoi anche utilizzare il metodo explain(), ad esempio:
db.collection.find({QUERY}).explain('executionStats')Limitazioni
Tieni presenti le seguenti limitazioni e differenze:-
Spiegazione query non supporta i comandi che restituiscono un cursore. Ad esempio, non è supportato il richiamo di explain chiamando direttamente il seguente comando:
db.collection.aggregate(..., explain: true)
Spiegazione query è supportata solo per i
find,aggregate,count, edistinctcomandi.-
Le opzioni
VerbosityeCommentdi Spiegazione query non sono supportate tramite l'API MongoDB. Il comportamento corrisponde all'opzioneexecutionStats. Le opzioniallPlansExecutionequeryPlannervengono ignorate se fornite.Se non viene fornita alcuna verbosità, la shell utilizza la verbosità
queryPlannere filtra le statistiche di esecuzione. Per visualizzare l'output completo, devi utilizzare la verbositàexecutionStatsoallPlansExecution.
Analisi
L'output di Spiegazione query contiene due componenti principali: le statistiche di riepilogo e l'albero di esecuzione. Considera questa query come esempio:
db.order.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
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 query è vicina ai limiti di memoria.
Billing Metrics:
read units: 1
Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 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 attraversa l'albero per generare una risposta alla query.
Per informazioni dettagliate su ogni nodo di esecuzione, consulta le informazioni di riferimento sull'esecuzione.
Per informazioni dettagliate su come utilizzare queste informazioni per ottimizzare le query, consulta Ottimizzare l'esecuzione delle query.
Di seguito è riportato un esempio di albero di esecuzione:
• 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
Passaggi successivi
- Per scoprire di più sui nodi dell'albero di esecuzione, consulta le informazioni di riferimento sull'esecuzione delle query.
- Per scoprire come ottimizzare le query, consulta Ottimizzare l'esecuzione delle query.