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

Рекомендации по масштабированию

Введение

Автомасштабирование ресурсов базы данных требует тонкой настройки баланса: слишком медленное увеличение ресурсов может привести к ухудшению производительности, а слишком агрессивное уменьшение — вызвать постоянные колебания.

ClickHouse Cloud позволяет быстрее уменьшать ресурсы, сводит к минимуму колебания масштабирования и существенно снижает затраты на инфраструктуру при переменной рабочей нагрузке, сохраняя при этом стабильность, необходимую для баз данных в продакшене, за счет сочетания механизма рекомендаций с двумя временными окнами и системы рекомендаций по CPU с отслеживанием целевого значения.

Масштабирование на основе CPU

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

ParameterValueMeaning
Target utilization53%Уровень загрузки, который ClickHouse стремится поддерживать
High watermark75%Запускает масштабирование вверх, когда загрузка CPU превышает этот порог
Low watermark37.5%Запускает масштабирование вниз, когда загрузка CPU опускается ниже этого порога

Рекомендатель оценивает загрузку CPU на основе исторических данных и определяет рекомендуемый объём CPU по следующей формуле:

recommended_cpu = max_cpu_usage / target_utilization

Если загрузка CPU находится в диапазоне 37.5%–75% от выделенных ресурсов, масштабирование не выполняется. За пределами этого диапазона рекомендатель вычисляет точный требуемый размер, чтобы вернуть загрузку к 53%, и сервис масштабируется соответствующим образом.

Пример

Сервису выделено 4 vCPU, и при всплеске нагрузки потребление возрастает до 3.8 vCPU (~95% утилизации), превышая верхний порог в 75%. Рекомендатель вычисляет: 3.8 / 0.53 ≈ 7.2 vCPU, затем округляет результат вверх до следующего доступного размера (8 vCPU). Когда нагрузка спадает и потребление опускается ниже 37.5% (1.5 vCPU), рекомендатель пропорционально уменьшает выделенные ресурсы.

Рекомендации по объёму памяти

ClickHouse Cloud автоматически рекомендует объём памяти на основе фактического характера использования вашего сервиса. Рекомендатель анализирует использование за окно ретроспективного анализа и добавляет запас, чтобы выдерживать всплески нагрузки и предотвращать ошибки нехватки памяти (OOM).

Рекомендатель учитывает три сигнала:

  • Память запроса: пиковое потребление памяти во время выполнения запроса
  • Резидентная память: пиковый объём памяти, который в целом использует процесс
  • События OOM: были ли недавно случаи нехватки памяти у запросов или реплик

Как рассчитывается запас

Для памяти запросов и резидентной памяти величина добавляемого запаса зависит от того, насколько предсказуем характер использования:

  • Стабильное использование (низкая вариативность): множитель 1.25x — больший запас, поскольку потребление стабильно и вероятность неожиданного всплеска мала
  • Скачкообразное использование (высокая вариативность): множитель 1.1x — меньший запас, чтобы избежать избыточного выделения ресурсов для рабочих нагрузок, у которых и так высокая вариативность

Если обнаружены события OOM, рекомендатель применяет более агрессивный множитель 1.5x, чтобы обеспечить сервису достаточно памяти для восстановления.

Итоговая рекомендация

Система выбирает наибольшее значение среди всех сигналов:

desired_memory = max(
  query_memory × skew_multiplier,
  resident_memory × skew_multiplier,
  resident_memory × 1.5,   // if query OOMs detected
  rss_at_crash × 1.5       // if pod OOMs detected
)

Рекомендатель с двумя окнами

Вместо одного окна ClickHouse Cloud использует два окна ретроспективного анализа с разными временными диапазонами:

  • Малое окно (3 часа): Отслеживает недавние паттерны использования и позволяет быстрее уменьшать масштаб
  • Большое окно (30 часов): Обеспечивает увеличение масштаба за один шаг до максимального уровня использования, наблюдавшегося в более длинном окне ретроспективного анализа, а не через несколько постепенных увеличений. Это важно, потому что масштабирование требует времени и сбрасывает локальный кэш; поэтому безопаснее увеличивать масштаб за один шаг.

Каждое окно независимо формирует рекомендацию на основе анализа памяти и CPU. Затем система объединяет эти рекомендации в зависимости от того, какое направление масштабирования предлагает каждое окно, как показано на рисунке ниже:

Логика объединения в рекомендателе с двумя окнами

Подробный разбор проектных решений, лежащих в основе рекомендателя, см. в статье "Более умное автомасштабирование для ClickHouse: подход с двумя окнами "