На этой странице описано, как получить информацию о выполнении запроса.
Как использовать Query Explain
Используйте Query Explain, чтобы понять, как выполняются ваши запросы. Эта информация поможет вам оптимизировать запросы.
Вы можете использовать Query Explain в консоли Firebase или с помощью клиентских библиотек сервера Firestore.Консоль
-
В консоли Firebase выберите Databases and Storage (Базы данных и хранилище) > Firestore > Data (Данные) > Query Editor (Редактор запросов).
- Выполните запрос, для которого хотите получить информацию о выполнении.
- Чтобы посмотреть результаты анализа запроса, перейдите на вкладку Query Explain (Объяснение запроса).
Node.js (Admin)
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 (Admin)
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– планирует запрос, но не выполняет его. Возвращает информацию о планировщике, но не статистику, показатели или результаты выполнения. Это полезно для отладки поведения запроса без выполнения дорогостоящих операций.stats– планирует и выполняет запрос, но не возвращает результаты. Возвращает информацию о планировщике, статистику выполнения и показатели.
Анализ
Выходные данные 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
Дальнейшие действия
- Подробную информацию об узлах дерева выполнения можно найти в справочнике по выполнению запросов.
- Подробнее о том, как оптимизировать выполнение запросов…