| Dotyczy tylko wersji Cloud Firestore Enterprise. |
Na tej stronie opisujemy, jak pobrać informacje o wykonywaniu zapytania.
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 Query Explain możesz używać w konsoli Google Cloud lub za pomocą polecenia explain.
Konsola
Uruchom 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 w trybie zgodności z MongoDB. W konsoli Google Cloud otworzy się 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
Zapytanie Explain w interfejsie MongoDB API jest obsługiwane przez polecenie explain, 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ływanie wyjaśnienia przez bezpośrednie wywołanie tego polecenia nie jest obsługiwane:
db.collection.aggregate(..., explain: true)
Funkcja wyjaśniania zapytań jest obsługiwana tylko w przypadku poleceń
find,aggregate,countidistinct.-
Opcje
VerbosityiCommentfunkcji Query Explain nie są obsługiwane przez interfejs 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
queryPlanneri odfiltruje statystyki wykonania. Aby zobaczyć pełne dane wyjściowe, musisz użyć poziomu szczegółowościexecutionStatsluballPlansExecution.
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.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. Korzystaj z tych statystyk, aby 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.
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, 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:
• 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?
- 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ń.