Nur für die Cloud Firestore Enterprise-Edition relevant. |
Auf dieser Seite wird beschrieben, wie Sie Informationen zur Ausführung von Abfragen abrufen, wenn Sie eine Abfrage ausführen.
„Query Explain“ verwenden
Mit „Query Explain“ können Sie nachvollziehen, wie Ihre Abfragen ausgeführt werden. Hier finden Sie Details, mit denen Sie Ihre Abfragen optimieren können.
Sie können „Query Explain“ über die Google Cloud Console oder den Befehl explain
verwenden.
Console
Führen Sie eine Abfrage im Abfrageeditor aus und öffnen Sie den Tab Erklärung:
-
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
- Wählen Sie in der Liste der Datenbanken eine Cloud Firestore-Datenbank mit MongoDB-Kompatibilität aus. In der Google Cloud Console wird der Firestore-Explorer für diese Datenbank geöffnet.
- Geben Sie eine Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen.
-
Klicken Sie auf den Tab Erklärung, um die Ausgabe der Abfrageanalyse aufzurufen.
MongoDB API
„Query Explain“ in der MongoDB API wird über den Befehl explain
unterstützt, den Sie in Tools wie Mongo Shell und Compass verwenden können.
Der Befehl explain
wird mit den Befehlen aggregate
, find
, distinct
und count
unterstützt, z. B.:
db.collection.explain.find(...)
Sie können auch die explain()
-Methode verwenden, z. B.:
db.collection.find({QUERY}).explain()
Beschränkungen
Beachten Sie die folgenden Einschränkungen und Unterschiede:-
„Query Explain“ unterstützt keine Befehle, die einen Cursor zurückgeben. Das Aufrufen von „explain“ durch direkten Aufruf des folgenden Befehls wird beispielsweise nicht unterstützt:
db.collection.aggregate(..., explain: true)
„Abfrage erläutern“ wird nur für die Befehle
find
,aggregate
,count
unddistinct
unterstützt.-
Die Optionen
Verbosity
undComment
von „Query Explain“ werden über die MongoDB API nicht unterstützt. Das Verhalten entspricht der OptionexecutionStats
. Die OptionenallPlansExecution
undqueryPlanner
werden ignoriert, falls sie angegeben sind.
Analyse
Die Ausgabe von „Query Explain“ enthält zwei Hauptkomponenten: die Zusammenfassungsstatistiken und den Ausführungsbaum. Betrachten Sie die folgende Abfrage als Beispiel:
db.order.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
Zusammenfassende Statistiken
Oben in der erläuterten Ausgabe finden Sie eine Zusammenfassung der Ausführungsstatistiken. Anhand dieser Statistiken können Sie feststellen, ob eine Abfrage eine hohe Latenz oder hohe Kosten verursacht. Er enthält auch Speicherstatistiken, mit denen Sie sehen können, wie nahe Ihre Abfrage an den Speicherlimits liegt.
Billing Metrics:
read units: 1
Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1
Ausführungsstruktur
Die Ausführungsstruktur beschreibt die Abfrageausführung als eine Reihe von Knoten. Die unteren Knoten (Blattknoten) rufen Daten aus der Speicherebene ab, die den Baum durchläuft, um eine Antwort auf die Anfrage zu generieren.
Weitere Informationen zu den einzelnen Ausführungsknoten finden Sie in der Ausführungsreferenz.
Weitere Informationen dazu, wie Sie diese Informationen zum Optimieren Ihrer Abfragen verwenden können, finden Sie unter Abfrageausführung optimieren.
Das folgende Beispiel zeigt einen Ausführungsbaum:
• 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
Nächste Schritte
- Informationen zu den Knoten des Ausführungsbaums finden Sie in der Referenz zur Abfrageausführung.
- Informationen zum Optimieren von Abfragen finden Sie unter Abfrageausführung optimieren.