| Это относится только к версии Cloud Firestore Enterprise. |
На этой странице описано, как получить информацию о выполнении запроса при его выполнении.
Используйте запрос Explain.
С помощью функции Query Explain вы можете понять, как выполняются ваши запросы. Это предоставит подробную информацию, которую вы сможете использовать для оптимизации ваших запросов .
Вы можете использовать Query Explain через консоль Google Cloud или команду explain .
Консоль
Выполните запрос в редакторе запросов и откройте вкладку «Пояснение» :
В консоли Google Cloud перейдите на страницу «Базы данных» .
- Из списка баз данных выберите базу данных, совместимую с Cloud Firestore и MongoDB. Консоль Google Cloud откроет Firestore Explorer для этой базы данных.
- Введите запрос в редакторе запросов и нажмите «Выполнить» .
Чтобы просмотреть результаты анализа запроса, нажмите вкладку «Пояснение» .

API MongoDB
Функция Query Explain в API MongoDB поддерживается с помощью команды explain , которую можно использовать в таких инструментах, как Mongo Shell и Compass.
Команда explain поддерживается командами aggregate , find , distinct и count , например:
db.collection.explain('executionStats').find(...) Вы также можете использовать метод explain() , например:
db.collection.find({QUERY}).explain('executionStats')Ограничения
Обратите внимание на следующие ограничения и различия:Query Explain не поддерживает команды, возвращающие курсор. Например, вызов explain путем прямого вызова следующей команды не поддерживается:
db.collection.aggregate(..., explain: true)
Функция Query Explain поддерживается только для команд
find,aggregate,countиdistinct.Параметры
VerbosityиCommentфункции Query Explain не поддерживаются через API MongoDB. Поведение соответствует параметруexecutionStats. ПараметрыallPlansExecutionиqueryPlannerигнорируются, если они указаны.Если уровень детализации не указан, оболочка использует уровень детализации
queryPlannerи отфильтровывает статистику выполнения. Для просмотра полного вывода необходимо использовать уровень детализацииexecutionStatsилиallPlansExecution.
Анализ
Результат выполнения команды 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
Что дальше?
- Чтобы узнать больше об узлах дерева выполнения, см. справочник по выполнению запросов .
- Чтобы узнать, как оптимизировать запросы, см. раздел «Оптимизация выполнения запросов» .