Na tej stronie opisujemy, jak podczas wykonywania zapytania pobierać informacje o jego wykonaniu.
Korzystanie z funkcji Wyjaśnij zapytanie
Za pomocą funkcji Wyjaśnienie zapytania możesz sprawdzić, jak są wykonywane Twoje zapytania. Zawiera ona szczegółowe informacje, które możesz wykorzystać do optymalizacji zapytań.
Funkcji Wyjaśnienie zapytania możesz używać w konsoli Firebase:
- 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.
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 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 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ń.