Na tej stronie opisujemy, jak pobierać informacje o wykonywaniu zapytań.
Korzystanie z funkcji Query Explain
Użyj funkcji Query Explain, aby dowiedzieć się, jak są wykonywane Twoje zapytania. Dzięki temu uzyskasz szczegółowe informacje, które możesz wykorzystać do optymalizacji zapytań.
Możesz używać funkcji Query Explain w konsoli Firebase lub za pomocą bibliotek klienta serwera Firestore.Konsola
-
W konsoli Firebase otwórz Bazy danych i pamięć > Firestore > Dane > Edytor zapytań.
- Uruchom zapytanie, dla którego chcesz uzyskać informacje o wykonaniu.
- Kliknij kartę Wyjaśnienie zapytania , aby wyświetlić dane wyjściowe analizy zapytania.
Node.js (administrator)
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 (administrator)
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); }
Tryby wyjaśniania
W zależności od tego, co chcesz debugować, możesz wykonać zapytanie za pomocą funkcji Query Explain w różnych trybach:
analyze: planuje i wykonuje zapytanie. Zwraca informacje o planowaniu, statystyki i dane dotyczące wykonania w czasie rzeczywistym oraz zwykłe wyniki zapytania.explain: planuje zapytanie, ale go nie wykonuje. Zwraca informacje o planowaniu, ale nie zwraca statystyk, danych ani wyników w czasie rzeczywistym. Jest to przydatne do debugowania działania zapytania bez wykonywania kosztownych operacji.
Analiza
Dane wyjściowe funkcji Query Explain zawierają 2 główne komponenty – statystyki podsumowujące i drzewo wykonania. Jako przykład rozważmy to zapytanie:
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
Statystyki podsumowujące
U góry wyjaśnionych danych wyjściowych znajduje się podsumowanie statystyk wykonania. Na podstawie tych statystyk możesz określić, czy zapytanie ma długi czas oczekiwania lub wysoki koszt. Zawiera też statystyki pamięci, które informują, jak blisko limitów pamięci jest Twoje zapytanie .
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
Drzewo wykonania
Drzewo wykonania opisuje wykonanie zapytania jako serię węzłów. Węzły dolne (liście) pobierają dane z warstwy pamięci, która przechodzi przez drzewo, aby wygenerować odpowiedź na zapytanie.
Szczegółowe informacje o poszczególnych węzłach wykonania, znajdziesz w sekcji Informacje o wykonaniu.
Więcej informacji o tym, jak używać tych informacji do optymalizacji zapytań, zobacz Optymalizowanie wykonywania zapytań.
Oto przykład drzewa wykonania:
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
Co dalej?
- Aby dowiedzieć się więcej o węzłach drzewa wykonania, zapoznaj się z sekcją Informacje o wykonywaniu zapytań.
- Aby dowiedzieć się, jak optymalizować zapytania, zapoznaj się z sekcją Optymalizowanie wykonywania zapytań.