Na tej stronie opisujemy, jak podczas wykonywania zapytania pobierać informacje o jego wykonaniu.
Korzystanie z funkcji Wyjaśnij zapytanie
Użyj funkcji Wyjaśnienie zapytania, aby dowiedzieć się, jak są wykonywane Twoje zapytania. Zawiera ona 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 kliknij Bazy danych i miejsce na dane > Firestore > Dane > Edytor zapytań.
- Uruchom zapytanie, dla którego chcesz uzyskać informacje o wykonaniu.
- Aby wyświetlić wyniki analizy zapytania, kliknij kartę Wyjaśnienie zapytania.
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 (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); }
Wyjaśnienie trybów
W zależności od tego, co chcesz debugować, możesz wykonać zapytanie za pomocą funkcji Wyjaśnienie zapytania w różnych trybach:
analyze: planuje i wykonuje zapytanie. Zwraca informacje o planowaniu, statystyki i dane dotyczące wykonywania w czasie działania oraz zwykłe wyniki wygenerowane przez zapytanie.explain: planuje zapytanie, ale go nie wykonuje. Zwraca informacje o planerze, ale nie zwraca statystyk, danych ani wyników czasu działania. 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. Weźmy na przykład 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. Korzystaj z tych statystyk, aby określić, czy zapytanie ma długi czas oczekiwania lub wysoki koszt. Zawiera też statystyki pamięci, które informują, jak blisko zapytanie jest limitów pamięci.
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 (węzły liści) pobierają dane z warstwy pamięci, które są przekazywane w górę drzewa, aby wygenerować odpowiedź na zapytanie.
Szczegółowe informacje o poszczególnych węzłach wykonawczych znajdziesz w informacjach o wykonaniu.
Szczegółowe informacje o tym, jak używać tych informacji do optymalizacji zapytań, znajdziesz w artykule 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?
- Więcej informacji o węzłach drzewa wykonania znajdziesz w materiałach referencyjnych dotyczących wykonywania zapytań.
- Aby dowiedzieć się, jak optymalizować zapytania, przeczytaj artykuł Optymalizowanie wykonywania zapytań.