Обзор

При выполнении запросов к базе данных текст на языке SQL преобразуется в план запроса, пригодный для распределённого выполнения на кластере. Один и тот же запрос зачастую можно выполнить множеством различных способов, и оптимизатор YDB выбирает из них наиболее эффективный.

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

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

Примечание

В примерах этого раздела используется набор данных TPC-H. Схема таблиц и связи между ними описана в спецификации TPC-H. Некоторые примеры являются запросами из бенчмарка с адаптацией под YDB, другие специально подготовлены для иллюстрации излагаемого материала. Исходный текст SQL всех примеров позволяет самостоятельно повторить все описанные примеры.

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

После компиляции и оптимизации строится план выполнения запроса — последовательность операторов, которые необходимо выполнить для получения результата. Этот план можно получить при помощи параметрa --explain команды CLI ydb sql без реальной обработки данных. Этот план будет отражать структуру выполнения запроса и содержать оценки стоимостного оптимизатора, полученные на основании существующей статистики источников данных, такие как количество строк в таблице и её размер в байтах.

Этот план выдаётся в формате JSON, однако для изучения его удобнее представлять в виде визуализации. Доступные варианты зависят от того, как выполнялся запрос (SDK, CLI, UI) — см. План выполнения запроса.

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

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

  • длительность отдельных шагов (операторов)
  • объёмы переданных данных
  • ожидания, возникшие при взаимодействии отдельных узлов распределённой системы

Каждый шаг плана выполняется как набор задач, параллельно на множестве узлов. Детальная информация по каждой отдельной задаче занимала бы слишком большой объём, вместо этого она обрабатывается сервером и для каждого набора одинаковых задач публикуется в агрегированном виде, обогащая план в формате JSON.

Но даже в агрегированном виде статистика выполнения всё ещё является достаточно объёмной для самостоятельного анализа. Чтобы решить эту проблему, разработан специальный способ визуализации этой статистики вместе с планом в формате SVG. Как получить такой план читайте в статье План выполнения запроса; как его интерпретировать, читайте в разделе «Графический план запроса»: расположение информации, структура и визуализация метрик.

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

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

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