Производительность и настройка
Адаптивный оптимизатор и движок выполнения 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.
Статистика
Рассматриваются сбор и использование статистики таблиц, столбцов и гистограмм, на основе которой стоимостной оптимизатор запросов выбирает планы.
Тесты производительности
Star Schema Benchmark (SSB)
Результаты тестирования Doris по SSB на стандартном оборудовании, включая воспроизводимую конфигурацию среды и основные приёмы настройки.
TPC-H
Результаты тестирования Doris по TPC-H: загрузка данных, задержка запросов и рекомендации по сравнению.
TPC-DS
Результаты тестирования Doris по TPC-DS в более сложных аналитических сценариях с несколькими таблицами.