Auf dieser Seite wird beschrieben, wie Sie Informationen zur Abfrageausführung abrufen, wenn Sie eine Abfrage ausführen.
Query Explain verwenden
Mit Query Explain können Sie nachvollziehen, wie Ihre Abfragen ausgeführt werden. Sie erhalten Details, mit denen Sie Ihre Abfragen optimieren können.
Sie können Query Explain über die Firebase Console oder die Firestore-Server-Clientbibliotheken verwenden.Console
-
Rufen Sie in der Firebase Console Databases and Storage > Firestore > Data > Query Editor auf.
- Führen Sie die Abfrage aus, für die Sie Informationen zur Ausführung benötigen.
- Klicken Sie auf den Tab Query Explain , um die Ausgabe der Abfrageanalyse anzusehen.
Node.js (Admin)
import { field } from '@google-cloud/firestore/pipelines';
const q = db.pipeline() .collection('/users') .sort(field('status').ascending()) .limit(100); let results; try { results = await q.execute({ explainOptions: { mode: 'analyze', outputFormat: 'text' } }); } catch (error) { console.log(error); } const metrics = results?.explainStats?.text; console.log(metrics);
Java (Admin)
Pipeline q = db.pipeline() .collection("/users") .sort(field("status").ascending()) .limit(100); PipelineExecuteOptions pipelineOpts = new PipelineExecuteOptions().withExplainOptions( new ExplainOptions().withExecutionMode(ExplainOptions.ExecutionMode.ANALYZE) ); Pipeline.Snapshot result = q.execute(pipelineOpts).get(); String metrics = null; if (result.getExplainStats() != null) { metrics = result.getExplainStats().getText(); System.out.println(metrics); }
Modi für „Explain“
Je nachdem, was Sie debuggen möchten, können Sie eine Abfrage mit Query Explain in verschiedenen Modi ausführen:
analyze: Plant und führt die Abfrage aus. Gibt neben den regulären Ergebnissen der Abfrage auch Informationen zum Planer sowie Statistiken und Messwerte zur Laufzeitausführung zurück.explain: Plant die Abfrage, führt sie aber nicht aus. Gibt die Planerinformationen, aber keine Laufzeitstatistiken, Messwerte oder Ergebnisse zurück. Dies ist nützlich, um das Verhalten einer Abfrage zu debuggen, ohne kostspielige Vorgänge auszuführen.
Analyse
Die Ausgabe von Query Explain enthält zwei Hauptkomponenten: die Zusammenfassungsstatistiken und die Ausführungsstruktur. Betrachten Sie diese Abfrage als Beispiel:
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
Zusammenfassungsstatistiken
Oben in der Ausgabe von „Explain“ finden Sie eine Zusammenfassung der Ausführungsstatistiken. Anhand dieser Statistiken können Sie feststellen, ob eine Abfrage eine hohe Latenz oder hohe Kosten verursacht. Sie enthält auch Speicherstatistiken, mit denen Sie sehen können, wie nahe Ihre Abfrage an den Speicherlimitsliegt.
Execution:
results returned: 2
request peak memory usage: 20.25 KiB (20,736 B)
data bytes read: 148 B
entity row scanned: 2
Billing:
read units: 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 in der Struktur nach oben durchlaufen werden, um eine Abfrageantwort zu generieren.
Weitere Informationen zu den einzelnen Ausführungsknoten finden Sie in der Ausführungsreferenz.
Informationen dazu, wie Sie diese Informationen verwenden können, um Ihre Abfragen zu optimieren, finden Sie unter Abfrageausführung optimieren.
Im Folgenden sehen Sie ein Beispiel für eine Ausführungsstruktur:
Tree:
• Compute
| $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 2
| latency: 5.96 ms (local <1 ms)
|
└── • Compute
| $__name___1: map_get($record_1, "__key__")
|
| Execution:
| records returned: 2
| latency: 5.88 ms (local <1 ms)
|
└── • MajorSort
| fields: [$v_1 ASC]
| output: [$record_1]
| limit: 100
|
| Execution:
| records returned: 2
| latency: 5.86 ms (local <1 ms)
| peak memory usage: 20.25 KiB (20,736 B)
|
└── • Compute
| $v_1: map_get($record_1, "status")
|
| Execution:
| records returned: 2
| latency: 5.23 ms (local <1 ms)
|
└── • TableScan
source: /users
order: UNDEFINED
properties: *
row range: (-∞..+∞)
output record: $record_1
variables: [$record_1]
Execution:
records returned: 2
latency: 4.68 ms
records scanned: 2
data bytes read: 148 B
Nächste Schritte
- Informationen zu den Knoten der Ausführungsstruktur finden Sie in der Referenz zur Abfrageausführung.
- Informationen zum Optimieren von Abfragen finden Sie unter Abfrageausführung optimieren.