Перейти к содержимому
Последнее обновление

Производительность и настройка

Адаптивный оптимизатор и движок выполнения Pipeline в Apache Doris позволяют выполнять большинство рабочих нагрузок без дополнительной настройки, однако в промышленных средах обычно всё же требуется систематическая настройка производительности. Начните с методики настройки, чтобы выявить узкие места, а затем переходите к оптимизации конкретных сценариев выполнения запросов или загрузки данных. Если вам встретится план выполнения, который сложно объяснить, обратитесь к принципам работы технологий оптимизации, чтобы разобраться в лежащих в его основе механизмах.

Методика настройки​

Производительность запросов​

Оптимизация схемы и индексов

Определите верхний предел производительности запросов с помощью выбора модели таблицы, партиционирования и бакетирования, проектирования ключевых столбцов и выбора индексов (префиксного, BloomFilter, NGram и инвертированного).

Материализованное представление

Предварительно вычисляйте результаты с помощью синхронных или асинхронных материализованных представлений и ускоряйте существующие SQL-запросы за счёт прозрачного переписывания без изменения самих запросов.

Оптимизация Join

Устраняйте Shuffle с помощью Colocation Join и используйте Distribute и Leading Hint, чтобы вручную корректировать план Join, когда оптимизатор принимает неоптимальное решение.

Ускорение с помощью кэширования

Сочетайте SQL Cache, Condition Cache и файловый кэш внешних таблиц, чтобы при повторных запросах повторно использовать результаты, вычисления фильтров и удалённые данные.

Настройка выполнения

Опираясь на сведения об узких местах выполнения в Profile, настройте параллелизм, время ожидания RuntimeFilter, параметры обработки перекоса данных и правила CBO.

Высокая конкурентная нагрузка и точечные запросы

Используйте построчное хранение и выполнение с коротким замыканием для поддержки запросов по первичному ключу с высоким QPS в таблицах Unique Key, а для ускорения KV-запросов используйте таблицы-словари вместо соединений с таблицами измерений.

Подсчёт уникальных значений

Используйте BITMAP для точной дедупликации или HLL для приближённого вычисления UV, когда допустима погрешность 1%-2%, чтобы существенно сократить потребление памяти и затраты на хранение.

Профиль запроса

С помощью Profile анализируйте распределение времени между такими операторами, как Scan, Exchange, Join и агрегация, чтобы быстро определить самый медленный этап запроса.

Производительность загрузки данных​

Принципы работы технологий оптимизации​

Оптимизатор запросов

Рассматриваются переписывание на основе правил и стоимостная модель оптимизатора Nereids, включая эквивалентные преобразования на основе правил и Join Enumeration на основе стоимости.

Движок выполнения Pipeline

Рассматриваются модель Pipeline, механизм планирования и параллельное выполнение Morsel-Driven, составляющие основу слоя выполнения Doris.

Runtime Filter

Рассматривается механизм выполнения, при котором RuntimeFilter создаётся на стороне построения Join и проталкивается на сторону зондирования для пропуска ненужных данных.

Оптимизация TopN

Рассматриваются выполнение с коротким замыканием и оптимизация частичной сортировки в сценариях ORDER BY ... LIMIT, позволяющие пропустить большую часть данных и быстро вернуть TopN.

Статистика

Рассматриваются сбор и использование статистики таблиц, столбцов и гистограмм, на основе которой стоимостной оптимизатор запросов выбирает планы.

Тесты производительности​