Query Explain ti consente di inviare query in modalità Datastore al backend e di ricevere in cambio statistiche dettagliate sul rendimento dell'esecuzione delle query sul backend. Funziona come l'operazione EXPLAIN ANALYZE
in molti
sistemi di database relazionali.
Puoi inviare richieste di spiegazione della query utilizzando le librerie client in modalità Datastore.
I risultati di Query Explain ti aiutano a capire come vengono eseguite le query, mostrandoti le inefficienze e la posizione di probabili colli di bottiglia lato server.
Spiegazione della query:
- Fornisce approfondimenti sulla fase di pianificazione per consentirti di modificare gli indici delle query e aumentare l'efficienza.
- Ti aiuta a comprendere il costo e il rendimento su base per query e consente di eseguire rapidamente l'iterazione di diversi pattern di query al fine di ottimizzarne l'utilizzo.
Informazioni sulle opzioni di spiegazione della query: predefinita e analisi
Le operazioni di spiegazione delle query possono essere eseguite utilizzando l'opzione predefinita o analizza.
Con l'opzione predefinita, Query Explain pianifica la query, ma salta la fase di esecuzione. Verranno restituite le informazioni sulla fase del pianificatore. Puoi utilizzarlo per verificare che una query abbia gli indici necessari e capire quali vengono utilizzati. In questo modo, ad esempio, puoi verificare che una determinata query utilizzi un indice composto anziché dover eseguire l'intersezione di più indici diversi.
Con l'opzione di analisi, Query Explain genera entrambi i piani ed esegue la query. Verranno restituite tutte le informazioni del pianificatore menzionate in precedenza, insieme alle statistiche del runtime di esecuzione della query. Saranno inclusi i dati di fatturazione e gli approfondimenti a livello di sistema sull'esecuzione delle query. Puoi utilizzare questo strumento per testare varie configurazioni di query e indici al fine di ottimizzarne il costo e la latenza.
Quanto costa Query Explain?
Quando una query viene spiegata con l'opzione predefinita, non vengono eseguite operazioni di indice o lettura. Indipendentemente dalla complessità della query, viene addebitata un'operazione di lettura.
Quando una query viene spiegata con l'opzione di analisi, vengono eseguite operazioni di indicizzazione e lettura, pertanto ti viene addebitato il costo della query come di consueto. Non è previsto alcun costo aggiuntivo per l'attività di analisi, ma solo l'importo consueto per la query in esecuzione.
Esegui una query con l'opzione predefinita
Puoi utilizzare una libreria client per inviare una richiesta di opzione predefinita.
Tieni presente che i risultati della spiegazione della query vengono autenticati con Identity and Access Management, utilizzando le stesse autorizzazioni per le normali operazioni di query.
Java
Per scoprire come installare e utilizzare la libreria client per la modalità Datastore, consulta Librerie client per la modalità Datastore. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java in modalità Datastore.
Per autenticarti alla modalità Datastore, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Consulta il campo indexes_used
nella risposta per informazioni sugli indici utilizzati nel piano di query:
"indexes_used": [ {"query_scope": "Collection Group", "properties": "(__name__ ASC)"}, ]
Per ulteriori informazioni sul report, consulta il riferimento del report.
Esegui una query con l'opzione di analisi
Puoi utilizzare una libreria client per inviare una richiesta di opzione predefinita.
Tieni presente che i risultati dell'analisi delle query vengono autenticati con Identity and Access Management (IAM), utilizzando le stesse autorizzazioni per le normali operazioni di query.
Java
Per scoprire come installare e utilizzare la libreria client per la modalità Datastore, consulta Librerie client per la modalità Datastore. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java in modalità Datastore.
Per autenticarti alla modalità Datastore, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Consulta l'oggetto executionStats
per trovare informazioni sulla profilazione delle query, ad esempio:
{ "resultsReturned": "5", "executionDuration": "0.100718s", "readOperations": "5", "debugStats": { "index_entries_scanned": "95000", "documents_scanned": "5" "billing_details": { "documents_billable": "5", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }
Per ulteriori informazioni sul report, consulta il riferimento del report.
Interpreta i risultati e apporta aggiustamenti
Lo scenario di esempio seguente esegue query sui film in base al genere e al paese di produzione e mostra come ottimizzare gli indici utilizzati dalla query.
Per ulteriori informazioni sul report, consulta il riferimento al report Spiega query.
A titolo esemplificativo, ipotizza l'equivalente di questa query SQL.
SELECT * FROM movies WHERE category = 'Romantic' AND country = 'USA';
Se utilizziamo l'opzione di analisi, il seguente output del report mostra che la query viene eseguita sugli indici a campo singolo (category ASC, __name__ ASC)
e (country ASC, __name__ ASC)
. Scansiona 16.500 voci dell'indice, ma restituisce solo 1200 documenti.
// Output query planning info "indexes_used": [ {"query_scope": "Collection Group", "properties": "(category ASC, __name__ ASC)"}, {"query_scope": "Collection Group", "properties": "(country ASC, __name__ ASC)"}, ] // Output query status { "resultsReturned": "1200", "executionDuration": "0.118882s", "readOperations": "1200", "debugStats": { "index_entries_scanned": "16500", "documents_scanned": "1200" "billing_details": { "documents_billable": "1200", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }
Per ottimizzare le prestazioni dell'esecuzione della query, puoi creare un indice composito completamente coperto (categoria ASC, paese ASC, __name__ ASC).
Eseguendo di nuovo la query in modalità di analisi, possiamo vedere che l'indice appena creato è selezionato per questa query, che viene eseguita molto più velocemente ed efficacemente.
// Output query planning info "indexes_used": [ {"query_scope": "Collection Group", "properties": "(category ASC, country ASC, __name__ ASC)"} ] // Output query stats { "resultsReturned": "1200", "executionDuration": "0.026139s", "readOperations": "1200", "debugStats": { "index_entries_scanned": "1200", "documents_scanned": "1200" "billing_details": { "documents_billable": "1200", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }