Na tej stronie opisujemy, jak pobierać informacje o wykonaniu zapytania.
Używanie funkcji Wyjaśnij zapytanie
Funkcja Wyjaśnij zapytanie pozwala zrozumieć, jak są wykonywane Twoje zapytania. Dzięki temu możesz uzyskać szczegółowe informacje, które pomogą Ci zoptymalizować zapytania.
Funkcji Wyjaśnij zapytanie możesz używać w konsoli Google Cloud lub za pomocą polecenia explain.
Konsola
Wykonaj zapytanie w edytorze zapytań i otwórz kartę Wyjaśnienie:
-
W konsoli Google Cloud otwórz stronę Bazy danych.
- Z listy baz danych wybierz bazę danych Cloud Firestore. Konsola Google Cloud otworzy Eksplorator Firestore dla tej bazy danych.
- Wpisz zapytanie w edytorze zapytań i kliknij Uruchom.
-
Kliknij kartę Wyjaśnienie , aby wyświetlić dane wyjściowe analizy zapytania.
MongoDB API
Funkcja Wyjaśnij zapytanie w MongoDB API jest obsługiwana za pomocą
explain
polecenia, którego możesz używać w narzędziach takich jak Mongo Shell i Compass.
Polecenie explain jest obsługiwane w przypadku poleceń aggregate, find, distinct i count, na przykład:
db.collection.explain('executionStats').find(...)
Możesz też użyć metody explain(), na przykład:
db.collection.find({QUERY}).explain('executionStats')Ograniczenia
Pamiętaj o tych ograniczeniach i różnicach:-
Funkcja Wyjaśnij zapytanie nie obsługuje poleceń, które zwracają kursor. Na przykład wywołanie funkcji explain przez bezpośrednie wywołanie tego polecenia nie jest obsługiwane:
db.collection.aggregate(..., explain: true)
Funkcja Wyjaśnij zapytanie jest obsługiwana tylko w przypadku poleceń
find,aggregate,count, idistinct.-
Opcje
VerbosityiCommentfunkcji Wyjaśnij zapytanie nie są obsługiwane przez MongoDB API. Działanie jest zgodne z opcjąexecutionStats. OpcjeallPlansExecutioniqueryPlannersą ignorowane, jeśli zostaną podane.Jeśli nie podasz poziomu szczegółowości, powłoka użyje poziomu szczegółowości
queryPlanneri odfiltruje statystyki wykonania. Aby zobaczyć pełne dane wyjściowe, musisz użyć poziomu szczegółowościexecutionStatsluballPlansExecution.
Analiza
Dane wyjściowe funkcji Wyjaśnij zapytanie zawierają 2 główne komponenty – statystyki podsumowujące i drzewo wykonania. Jako przykład rozważ to zapytanie:
db.order.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
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. Zawierają one też statystyki pamięci, które informują, jak blisko limitów pamięci jest Twoje zapytanie do limitów pamięci.
Billing Metrics:
read units: 1
Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 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 masowej, 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 wykonania zapytania.
Oto przykład drzewa wykonania:
• Compute
| $out_1: map_set($record_1, "__id__", $__id___1, "__key__", $__key___1, "__row_id__", $__row_id___1, "__$0__", $__$0___2)
| is query result: true
|
| Execution:
| records returned: 1
|
└── • Compute
| $__$0___2: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__key___1: UNSET
| $__row_id___1: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__id___1: _id($record_1.__key__)
|
| Execution:
| records returned: 1
|
└── • MajorSort
| fields: [$v_5 ASC]
| output: [$record_1]
|
| Execution:
| records returned: 1
| peak memory usage: 4.00 KiB (4,096 B)
|
└── • Compute
| $v_5: array_get($v_4, 0L)
|
| Execution:
| records returned: 1
|
└── • Compute
| $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])
|
| Execution:
| records returned: 1
|
└── • Filter
| expression: $eq($user_id_1, 1,234)
|
| Execution:
| records returned: 1
|
└── • TableScan
source: **/my_collection
order: STABLE
properties: * - { __create_time__, __update_time__ }
output record: $record_1
output bindings: {$user_id_1=user_id}
variables: [$record_1, $user_id_1]
Execution:
records returned: 1
records scanned: 1
Co dalej?
- Aby dowiedzieć się więcej o węzłach drzewa wykonania, zapoznaj się z sekcją Informacje o wykonaniu zapytania.
- Aby dowiedzieć się, jak optymalizować zapytania, zapoznaj się z sekcją Optymalizowanie wykonania zapytania.