Mit „Query Explain“ können Sie Datastore-Modus-Abfragen an das Backend senden und erhalten im Gegenzug detaillierte Leistungsstatistiken zur Backend-Abfrageausführung. Sie funktioniert wie der Vorgang EXPLAIN ANALYZE
in vielen relationalen Datenbanksystemen.
Sie können Query Explain-Anfragen mit den Clientbibliotheken im Datastore-Modus senden.
Mithilfe der Ergebnisse von „Query Explain“ können Sie nachvollziehen, wie Ihre Abfragen ausgeführt werden. Sie sehen Ineffizienzen und den Ort wahrscheinlicher serverseitiger Engpässe.
Abfrageerklärung:
- Bietet Einblicke in die Planungsphase, damit Sie Ihre Abfrageindexe anpassen und die Effizienz steigern können.
- Sie können Kosten und Leistung auf Abfragebasis nachvollziehen und schnell verschiedene Abfragemuster durchlaufen, um die Nutzung zu optimieren.
Optionen für „Abfrage erläutern“: „Standard“ und „Analysieren“
Query Explain-Vorgänge können mit der Option default oder analyze ausgeführt werden.
Bei der Standardoption wird die Abfrage von Query Explain geplant, die Ausführungsphase wird jedoch übersprungen. Dadurch werden Informationen zur Planungsphase zurückgegeben. So können Sie prüfen, ob eine Abfrage die erforderlichen Indexe hat, und nachvollziehen, welche Indexe verwendet werden. So können Sie beispielsweise überprüfen, ob für eine bestimmte Abfrage ein zusammengesetzter Index verwendet wird, anstatt viele verschiedene Indexe zu schneiden.
Mit der Option „Analysieren“ plant und führt Query Explain die Abfrage aus. Dadurch werden alle oben genannten Planner-Informationen sowie Statistiken aus der Laufzeit der Abfrageausführung zurückgegeben. Dazu gehören Abrechnungsinformationen sowie Statistiken zur Abfrageausführung auf Systemebene. Mit diesen Tools können Sie verschiedene Abfrage- und Indexkonfigurationen testen, um Kosten und Latenz zu optimieren.
Was kostet „Abfrage erklären“?
Wenn eine Abfrage mit der Standardoption erläutert wird, werden keine Index- oder Leseoperationen ausgeführt. Unabhängig von der Komplexität der Abfrage wird ein Lesevorgang berechnet.
Wenn eine Abfrage mit der Option „Analysieren“ erläutert wird, werden Index- und Lesevorgänge ausgeführt. Die Abfrage wird Ihnen also wie gewohnt in Rechnung gestellt. Für die Analyseaktivität fallen keine zusätzlichen Kosten an. Es wird nur die übliche Gebühr für die ausgeführte Abfrage berechnet.
Abfrage mit der Standardoption ausführen
Sie können eine Clientbibliothek verwenden, um eine Anfrage für die Standardoption zu senden.
Die Ergebnisse von „Query Explain“ werden mit Identity and Access Management authentifiziert. Dabei werden dieselben Berechtigungen wie für reguläre Abfragevorgänge verwendet.
Java
Informationen zum Installieren und Verwenden der Clientbibliothek für den Datastore-Modus finden Sie hier. Weitere Informationen finden Sie in der Referenzdokumentation zur Datastore-Modus-Java-API.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich im Datastore-Modus zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Im Feld indexes_used
in der Antwort finden Sie Informationen zu den im Abfrageplan verwendeten Indexen:
"indexes_used": [ {"query_scope": "Collection Group", "properties": "(__name__ ASC)"}, ]
Weitere Informationen zum Bericht finden Sie in der Berichtsreferenz.
Abfrage mit der Option „Analysieren“ ausführen
Sie können eine Clientbibliothek verwenden, um eine Anfrage für die Standardoption zu senden.
Die Ergebnisse der Analyse von Abfragen werden mit Identity and Access Management (IAM) authentifiziert. Dabei werden dieselben Berechtigungen wie für reguläre Abfragevorgänge verwendet.
Java
Informationen zum Installieren und Verwenden der Clientbibliothek für den Datastore-Modus finden Sie hier. Weitere Informationen finden Sie in der Referenzdokumentation zur Datastore-Modus-Java-API.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich im Datastore-Modus zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Im executionStats
-Objekt finden Sie Informationen zum Abfrageprofil, z. B.:
{ "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", } } }
Weitere Informationen zum Bericht finden Sie in der Berichtsreferenz.
Ergebnisse interpretieren und Anpassungen vornehmen
Im folgenden Beispielszenario werden Filme nach Genre und Produktionsland abgefragt. Außerdem wird gezeigt, wie die von der Abfrage verwendeten Indexe optimiert werden.
Weitere Informationen zum Bericht finden Sie in der Referenz zum Bericht „Query Explain“.
Zur Veranschaulichung wird die Entsprechung dieser SQL-Abfrage angenommen.
SELECT * FROM movies WHERE category = 'Romantic' AND country = 'USA';
Wenn wir die Option „analyze“ verwenden, wird in der folgenden Berichtsausgabe angezeigt, dass die Abfrage für die Einzelfeldindizes (category ASC, __name__ ASC)
und (country ASC, __name__ ASC)
ausgeführt wird. Es werden 16.500 Indexeinträge gescannt, aber nur 1.200 Dokumente zurückgegeben.
// 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", } } }
Um die Leistung der Abfrageausführung zu optimieren, können Sie einen vollständig abgedeckten zusammengesetzten Index erstellen (category ASC, country ASC, __name__ ASC).
Wenn wir die Abfrage noch einmal im Analysemodus ausführen, sehen wir, dass der neu erstellte Index für diese Abfrage ausgewählt ist und die Abfrage viel schneller und effizienter ausgeführt wird.
// 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", } } }
Nächste Schritte
- Weitere Informationen zum Bericht „Query Explain“
- Weitere Informationen zum Optimieren von Abfragen und Indexen