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, o którego wykonaniu chcesz uzyskać informacje.
- Aby wyświetlić dane wyjściowe analizy zapytania, kliknij kartę Wyjaśnienie 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); }
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 wykonania w czasie działania i dane wraz ze zwykłymi wynikami wygenerowanymi 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.stats: planuje i wykonuje zapytanie, ale nie zwraca wyników. Zwraca informacje o planowaniu zwrotów, statystyki wykonania w czasie działania i dane.
Analiza
Dane wyjściowe polecenia 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. Na podstawie tych statystyk możesz określić, czy zapytanie ma wysoki czas oczekiwania lub 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 wykonywaniu.
Szczegółowe informacje o tym, jak używać tych informacji do optymalizowania 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 dokumentacji wykonania zapytania.
- Aby dowiedzieć się, jak optymalizować zapytania, przeczytaj artykuł Optymalizowanie wykonywania zapytań.