На этой странице описано, как получить информацию о выполнении запроса.
Как использовать 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
Дальнейшие действия
- Подробнее об узлах дерева выполнения…
- Подробнее о том, как оптимизировать выполнение запросов…