На этой странице описано, как получить информацию о выполнении запроса при его выполнении.
Используйте запрос Explain.
Используйте функцию Query Explain, чтобы понять, как выполняются ваши запросы. Это предоставит подробную информацию, которую вы можете использовать для оптимизации ваших запросов .
Вы можете использовать Query Explain через консоль Firebase или с помощью клиентских библиотек сервера Firestore .Консоль
В консоли Firebase перейдите в раздел «Базы данных и хранилища» > «Firestore» > «Данные» > «Редактор запросов» .
- Выполните запрос, для которого вам нужна информация о его выполнении.
- Click the Query Explain tab to view the query analysis output.
Node.js (администратор)
import { field } from '@google-cloud/firestore/pipelines';
const q = db.pipeline() .collection('/users') .sort(field('status').ascending()) .limit(100); let results; try { results = await q.execute({ explainOptions: { mode: 'analyze', outputFormat: 'text' } }); } catch (error) { console.log(error); } const metrics = results?.explainStats?.text; console.log(metrics);
Java (Администратор)
Pipeline q = db.pipeline() .collection("/users") .sort(field("status").ascending()) .limit(100); PipelineExecuteOptions pipelineOpts = new PipelineExecuteOptions().withExplainOptions( new ExplainOptions().withExecutionMode(ExplainOptions.ExecutionMode.ANALYZE) ); Pipeline.Snapshot result = q.execute(pipelineOpts).get(); String metrics = null; if (result.getExplainStats() != null) { metrics = result.getExplainStats().getText(); System.out.println(metrics); }
Объяснить режимы
В зависимости от того, что именно вы хотите отладить, вы можете выполнить запрос с помощью Query Explain в различных режимах:
analyze: Планирует и выполняет запрос. Возвращает информацию из планировщика, статистику и метрики выполнения во время выполнения, а также обычные результаты, полученные в результате запроса.explain: Планирует запрос, но не выполняет его. Возвращает информацию из планировщика, но не статистику, метрики или результаты выполнения. Это полезно для отладки поведения запроса без выполнения ресурсоемких операций.
Анализ
Результат выполнения команды Query Explain содержит два основных компонента: сводную статистику и дерево выполнения. Рассмотрим следующий запрос в качестве примера:
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
Сводная статистика
В верхней части пояснительного вывода содержится сводка статистики выполнения. Используйте эту статистику, чтобы определить, имеет ли запрос высокую задержку или стоимость. Она также содержит статистику использования памяти, которая показывает, насколько близок ваш запрос к пределам памяти .
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
Дерево выполнения
Дерево выполнения описывает выполнение запроса как последовательность узлов. Нижние узлы (листовые узлы) извлекают данные из уровня хранения, который перемещается вверх по дереву для генерации ответа на запрос.
Подробную информацию о каждом узле выполнения см. в справочнике по выполнению .
Подробную информацию о том, как использовать эти данные для оптимизации запросов, см. в разделе «Оптимизация выполнения запросов» .
Ниже приведён пример дерева выполнения:
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
Что дальше?
- Чтобы узнать больше об узлах дерева выполнения, см. справочник по выполнению запросов .
- Чтобы узнать, как оптимизировать запросы, см. раздел «Оптимизация выполнения запросов» .