Analizzare l'esecuzione delle query con Query Explain

Questa pagina descrive come recuperare le informazioni sull'esecuzione delle query quando esegui una query.

Utilizzare Query Explain

Puoi utilizzare Query Explain per capire come vengono eseguite le query. Fornisce dettagli che puoi utilizzare per ottimizzare le query.

Puoi utilizzare Query Explain tramite la console Google Cloud o il comando explain.

Console

Esegui una query nell'Editor query e apri la scheda Spiegazione:

  1. Nella console Google Cloud , vai alla pagina Database.

    Vai a Database

  2. Dall'elenco dei database, seleziona un database Firestore con compatibilità MongoDB. La console Google Cloud apre Firestore Explorer per il database.
  3. Inserisci una query nell'editor di query e fai clic su Esegui.
  4. Fai clic sulla scheda Spiegazione per visualizzare l'output dell'analisi della query.

    Scheda Query Explain nella console
API MongoDB

Query Explain nell'API MongoDB è supportata tramite il comando explain 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.find(...)

Puoi anche utilizzare il metodo explain(), ad esempio:

db.collection.find({QUERY}).explain()
Limitazioni
Tieni presenti le seguenti limitazioni e differenze:
  • Query Explain non supporta i comandi che restituiscono un cursore. Ad esempio, l'invocazione di explain chiamando direttamente il seguente comando non è supportata:

    db.collection.aggregate(..., explain: true)
  • Query Explain è supportato solo sui comandi find, aggregate, count e distinct.

  • Le opzioni Verbosity e Comment di Query Explain non sono supportate tramite l'API MongoDB. Il comportamento corrisponde all'opzione executionStats. Le opzioni allPlansExecution e queryPlanner vengono ignorate se specificate.

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.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 latenza o costi elevati. Contiene anche statistiche sulla memoria che ti consentono di sapere quanto la query si avvicina 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 ciascun 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:

• Drop
|  fields to drop: [__$3__]
|  records returned: 0
|
└── • MajorSort
    |  fields: [__$3__ ASC]
    |  peak memory usage: 4.00 KiB (4,096 B)
    |  records returned: 0
    |
    └── • Extend
        |  expressions: [date_placed AS __$3__]
        |  records returned: 0
        |
        └── • Drop
            |  fields to drop: [__key__]
            |  records returned: 0
            |
            └── • Extend
                |  expressions: [_id(__key__) AS __id__]
                |  records returned: 0
                |
                └── • Filter
                    |  expression: $eq(user, 1,234)
                    |  records returned: 0
                    |
                    └── • TableScan
                           order: UNDEFINED
                           properties: * - { __create_time__, __update_time__ }
                           records returned: 0
                           records scanned: 0
                           source: (default)#/**/collection

Passaggi successivi