Относится только к версии Cloud Firestore Enterprise. |
На этой странице описывается, как получить информацию о выполнении запроса при его выполнении.
Использовать запрос «Объяснение»
Вы можете использовать Query Explain, чтобы понять, как выполняются ваши запросы. Это предоставляет информацию, которую можно использовать для оптимизации запросов .
Вы можете использовать Query Explain через консоль Google Cloud или команду explain
.
Консоль
Выполните запрос в редакторе запросов и откройте вкладку «Пояснение» :
В консоли Google Cloud перейдите на страницу Базы данных .
- В списке баз данных выберите базу данных Cloud Firestore, совместимую с MongoDB. Консоль Google Cloud откроет Firestore Explorer для этой базы данных.
- Введите запрос в редакторе запросов и нажмите кнопку Выполнить .
Нажмите вкладку «Пояснение» , чтобы просмотреть результаты анализа запроса.
API MongoDB
Запрос Explain в API MongoDB поддерживается с помощью команды explain
, которую можно использовать в таких инструментах, как Mongo Shell и Compass.
Команда explain
поддерживается командами aggregate
, find
, distinct
и count
, например:
db.collection.explain.find(...)
Вы также можете использовать метод explain()
, например:
db.collection.find({QUERY}).explain()
Ограничения
Обратите внимание на следующие ограничения и различия:Query Explain не поддерживает команды, возвращающие курсор. Например, вызов Explain путём прямого вызова следующей команды не поддерживается:
db.collection.aggregate(..., explain: true)
Запрос Explain поддерживается только для команд
find
,aggregate
,count
иdistinct
.Параметры
Verbosity
иComment
Query Explain не поддерживаются в API MongoDB. Поведение аналогично параметруexecutionStats
. ПараметрыallPlansExecution
иqueryPlanner
игнорируются, если указаны.
Анализ
Вывод Query Explain содержит два основных компонента: сводную статистику и дерево выполнения. Рассмотрим этот запрос в качестве примера:
db.order.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
Сводная статистика
В верхней части пояснённого вывода содержится сводка статистики выполнения. Используйте эту статистику, чтобы определить, имеет ли запрос высокую задержку или стоимость. Она также содержит статистику использования памяти, которая позволяет определить, насколько ваш запрос близок к ограничениям памяти .
Billing Metrics:
read units: 1
Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1
Дерево исполнения
Дерево выполнения описывает выполнение запроса как последовательность узлов. Нижние узлы (листовые узлы) извлекают данные из уровня хранения, который затем перемещается вверх по дереву для генерации ответа на запрос.
Подробную информацию о каждом узле выполнения см. в справочнике по выполнению .
Подробную информацию об использовании этой информации для оптимизации запросов см. в разделе Оптимизация выполнения запросов .
Ниже приведен пример дерева выполнения:
• 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
Что дальше?
- Информацию об узлах дерева выполнения см. в справочнике по выполнению запросов .
- Чтобы узнать, как оптимизировать запросы, см. раздел Оптимизация выполнения запросов .