Na tej stronie opisujemy, jak podczas wykonywania zapytania pobierać informacje o jego realizacji.
Korzystanie z wyjaśnienia zapytania
Użyj funkcji wyjaśniania zapytań, aby dowiedzieć się, jak są wykonywane zapytania. Zawiera on szczegółowe informacje, które możesz wykorzystać do optymalizacji zapytań.
Z funkcji wyjaśniania zapytań możesz korzystać 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órym chcesz uzyskać informacje.
- 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); }
Wyjaśnij tryby
W zależności od tego, co chcesz debugować, możesz wykonać zapytanie za pomocą funkcji wyjaśniania zapytań w różnych trybach:
analyze: planuje i wykonuje zapytanie. Zwraca informacje o planowaniu, statystyki wykonywania i dane, a także zwykłe wyniki wygenerowane przez zapytanie.explain: planuje zapytanie, ale go nie wykonuje. Zwraca informacje o planie, ale nie zwraca statystyk, danych ani wyników dotyczących 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 planie, statystyki wykonywania i wskaźniki.
Analiza
Dane wyjściowe funkcji wyjaśniania zapytania zawierają 2 główne komponenty: podsumowanie statystyk i drzewo wykonywania. Rozważmy to zapytanie jako przykład:
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
Statystyki podsumowania
U góry wyjaśnionych danych wyjściowych znajduje się podsumowanie statystyk wykonania. Użyj 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 limitów pamięci jest 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 wykonywania
Drzewo wykonywania opisuje wykonywanie zapytania jako serię węzłów. Węzły dolne (węzły liści) pobierają dane z warstwy pamięci masowej, które przechodzą w górę drzewa, aby wygenerować odpowiedź na zapytanie.
Szczegółowe informacje o każdym węźle wykonywania znajdziesz w dokumentacji dotyczącej wykonywania.
Szczegółowe informacje o tym, jak wykorzystać te informacje do optymalizacji zapytań, znajdziesz w artykule Optymalizacja wykonywania zapytań.
Oto przykład drzewa wykonywania:
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 wykonywania znajdziesz w dokumentacji dotyczącej wykonywania zapytań.
- Aby dowiedzieć się, jak optymalizować zapytania, przeczytaj artykuł o optymalizowaniu wykonywania zapytań.