---
metadata:
  - name: generator
    content: Diplodoc Platform v5.62.0
alternate:
  - https://ydb-platform--ydb.viewer.diplodoc.com/en/dev/optimization/index.md
  - https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/index.md
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/index.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt
    rel: describedby
sourcePath: ru/core/dev/optimization/index.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt

# Обзор

При выполнении запросов к базе данных текст на языке SQL преобразуется в план запроса, пригодный для распределённого выполнения на [кластере](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#cluster). Один и тот же запрос зачастую можно выполнить множеством различных способов, и [оптимизатор](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/query_execution/optimizer.md) YDB  выбирает из них наиболее эффективный.

С помощью инструментов оптимизации запросов в YDB можно:

- понять, как база данных планирует выполнять запрос
- проанализировать, как именно запрос был выполнен по факту
- выявить и использовать возможности для ускорения выполнения

<!-- source: ru/dev/optimization/_includes/tpch-dataset-note.md -->
{% note info %}

В примерах этого раздела используется набор данных [TPC-H](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/ydb-cli/workload-tpch.md). Схема таблиц и связи между ними описана в спецификации TPC-H. Некоторые примеры являются запросами из бенчмарка с адаптацией под YDB, другие специально подготовлены для иллюстрации излагаемого материала. Исходный текст SQL всех примеров позволяет самостоятельно повторить все описанные примеры.

{% endnote %}
<!-- endsource: ru/dev/optimization/_includes/tpch-dataset-note.md -->

## Как база данных планирует выполнять запрос

После компиляции и оптимизации строится [план выполнения запроса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md) — последовательность [операторов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#operator), которые необходимо выполнить для получения результата. Этот план можно получить при помощи  параметрa [`--explain`](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#explain-cli) команды CLI `ydb sql` без реальной обработки данных. Этот план будет отражать структуру выполнения запроса и содержать оценки [стоимостного оптимизатора](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/query_execution/optimizer.md), полученные на основании существующей **статистики источников данных**, такие как количество строк в таблице и её размер в байтах.

Этот план выдаётся в формате [JSON](https://ru.wikipedia.org/wiki/JSON), однако для изучения его удобнее представлять в виде визуализации. Доступные варианты зависят от того, как выполнялся запрос (SDK, CLI, UI) — см. [План выполнения запроса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md).

## Как на самом деле был выполнен запрос

Для более детального и предметного анализа выполнения запроса YDB собирает **статистику выполнения**:

- длительность отдельных шагов ([операторов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#operator))
- объёмы переданных данных
- ожидания, возникшие при взаимодействии отдельных [узлов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#node) распределённой системы


Каждый шаг плана выполняется как набор [задач](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#task), параллельно на множестве [узлов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#node). Детальная информация по каждой отдельной задаче занимала бы слишком большой объём, вместо этого она обрабатывается сервером и для каждого набора одинаковых [задач](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#task) публикуется в агрегированном виде, обогащая план в формате [JSON](https://ru.wikipedia.org/wiki/JSON).

Но даже в агрегированном виде **статистика выполнения** всё ещё является достаточно объёмной для самостоятельного анализа. Чтобы решить эту проблему, разработан специальный способ визуализации этой статистики вместе с планом в формате [SVG](https://ru.wikipedia.org/wiki/SVG). Как [получить](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#svg-cli) такой план читайте в статье [План выполнения запроса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md); как его интерпретировать, читайте в разделе «Графический план запроса»: [расположение информации](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md), [структура](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/structure.md) и [визуализация метрик](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md).

## Что можно сделать для ускорения работы запроса

В этом разделе основной фокус сделан на анализе и интерпретации планов выполнения запросов: рассматриваются способы понять, как сервер планирует и реализует выполнение, а также как выявить узкие места с помощью изучения плана и сопутствующих метрик. Практические аспекты ускорения работы разбираются через нахождение потенциальных точек оптимизации на основе анализа этих данных.

## Структура раздела

- [План выполнения запроса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md)
    - [Обзор режимов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#modes-overview)
    - [Получение EXPLAIN плана через CLI и SDK](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#explain-cli)
    - [Получение EXPLAIN плана в UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#explain-ui)
    - [Получение плана при выполнении запроса через CLI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#analyze-cli)
    - [Получение плана при выполнении запроса в UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#analyze-ui)
    - [Получение графического плана при выполнении запроса через CLI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#svg-cli)
    - [Получение графического плана при выполнении запроса в UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/plans.md#svg-ui)
- Графический план запроса
    - [Расположение информации в плане запроса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md)
        - [Отдельные регионы (колонки)](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md#regions)
        - [Колонка ResultSet, Sink и Precompute](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md#resultset-column)
        - [Операторная статистика](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md#operators)
        - [Число задач стадии и прогресс их выполнения](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md#progress)
        - [Метрики по стадиям](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md#stages)
        - [Временные графики](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md#timeline)
        - [Интерактивные возможности](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/layout.md#interactive)
    - [Структура фактического плана запроса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/structure.md)
        - [Стадии](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/structure.md#stages)
        - [Каналы связи](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/structure.md#connections)
        - [Объединение стадий](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/structure.md#join)
        - [Множественные выходы](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/structure.md#multiout)
        - [Составные структуры](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/structure.md#complex)
    - [Визуализация метрик запроса](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md)
        - [Общий вид визуализации](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#overview)
        - [Параллельность](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#parallelism)
        - [Агрегаты](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#aggregates)
        - [Масштаб метрик](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#scale)
        - [Перекос данных](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#dataskew)
        - [Перекос времени](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#timeskew)
        - [Потребление CPU](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#cpu)
        - [Потребление памяти](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/metrics.md#memory)
- [Подсказки оптимизатора](https://ydb-platform--ydb.viewer.diplodoc.com/ru/dev/optimization/hints.md)
