Перейти к основному содержанию
Эта страница не применима к ClickHouse Cloud. Описанная здесь процедура в сервисах ClickHouse Cloud выполняется автоматически.

Регулятор управления частотой CPU

Всегда используйте регулятор performance. Регулятор on-demand работает заметно хуже при стабильно высокой нагрузке.

Ограничения CPU

Процессоры могут перегреваться. Используйте dmesg, чтобы проверить, не была ли тактовая частота CPU ограничена из-за перегрева. Ограничение также может устанавливаться извне, на уровне датацентра. Для отслеживания этого под нагрузкой можно использовать turbostat.

Оперативная память

Для небольших объёмов данных (до ~200 ГБ в сжатом виде) лучше использовать объём памяти, сопоставимый с объёмом данных. Для больших объёмов данных и при обработке интерактивных (онлайн) запросов следует использовать достаточный объём оперативной памяти (128 ГБ или больше), чтобы горячий набор данных помещался в кэше страниц. Даже при объёме данных ~50 ТБ на сервер использование 128 ГБ оперативной памяти значительно повышает производительность запросов по сравнению с 64 ГБ. Не отключайте overcommit. Значение cat /proc/sys/vm/overcommit_memory должно быть 0 или 1. Выполните
Используйте perf top, чтобы отслеживать, сколько времени ядро тратит на управление памятью. Постоянные большие страницы памяти также не нужно выделять.

Использование менее 16 ГБ оперативной памяти

Рекомендуемый объём оперативной памяти — 32 ГБ или больше. Если в вашей системе менее 16 ГБ оперативной памяти, вы можете столкнуться с различными ошибками нехватки памяти, поскольку настройки по умолчанию не рассчитаны на такой объём памяти. ClickHouse можно использовать и в системе с небольшим объёмом оперативной памяти (вплоть до 2 ГБ), но такие конфигурации требуют дополнительной настройки и поддерживают лишь низкую скорость приёма данных. При использовании ClickHouse с объёмом оперативной памяти менее 16 ГБ мы рекомендуем следующее:
  • Уменьшите размер кэша меток в config.xml. Его можно установить вплоть до 500 МБ, но не до нуля.
  • Уменьшите число потоков обработки запросов до 1.
  • Уменьшите max_block_size до 8192. Значения вплоть до 1024 тоже могут быть вполне практичными.
  • Уменьшите max_download_threads до 1.
  • Установите input_format_parallel_parsing и output_format_parallel_formatting в 0.
  • отключите запись в таблицы логов, так как из-за этого фоновая задача слияния продолжает резервировать оперативную память для выполнения слияний таблиц логов. Отключите asynchronous_metric_log, metric_log, text_log, trace_log.
Дополнительные примечания:
  • Чтобы очистить память, кэшированную аллокатором памяти, можно выполнить команду SYSTEM JEMALLOC PURGE.
  • Мы не рекомендуем использовать интеграции S3 или Kafka на машинах с небольшим объёмом оперативной памяти, поскольку для буферов им требуется значительный объём памяти.

Подсистема хранения

Если бюджет позволяет использовать SSD, используйте SSD. Если нет — HDD. Подойдут SATA HDD со скоростью 7200 об/мин. Лучше отдать предпочтение большому числу серверов с локальными жесткими дисками, чем меньшему числу серверов с подключёнными дисковыми полками. Но для хранения архивов, к которым обращаются редко, дисковые полки тоже подойдут.

RAID

При использовании HDD их можно объединить в RAID-10, RAID-5, RAID-6 или RAID-50. В Linux лучше использовать программный RAID (с mdadm). При создании RAID-10 выберите схему far. Если бюджет позволяет, выбирайте RAID-10. Сам по себе LVM (без RAID или mdadm) вполне подходит, но создание RAID с его помощью или его сочетание с mdadm — менее распространённый вариант, и вероятность ошибок выше (неправильный выбор размера фрагмента; смещение фрагментов; неправильный выбор типа RAID; забыли очистить диски). Если вы уверенно работаете с LVM, ничто не мешает использовать его. Если у вас больше 4 дисков, используйте RAID-6 (предпочтительно) или RAID-50 вместо RAID-5. При использовании RAID-5, RAID-6 или RAID-50 всегда увеличивайте stripe_cache_size, поскольку значение по умолчанию обычно не лучший вариант.
Рассчитайте точное значение исходя из количества устройств и размера блока, используя формулу: 2 * num_devices * chunk_size_in_bytes / 4096. Размер блока 64 КБ достаточен для большинства конфигураций RAID. Средний размер записи clickhouse-server составляет примерно 1 МБ (1024 КБ), поэтому рекомендуемый размер stripe тоже равен 1 МБ. При необходимости размер блока можно оптимизировать, установив его равным 1 МБ, делённому на количество дисков без чётности в массиве RAID, чтобы каждая запись распределялась параллельно по всем доступным дискам без чётности. Никогда не устанавливайте слишком маленький или слишком большой размер блока. На SSD можно использовать RAID-0. Независимо от использования RAID, всегда применяйте репликацию для защиты данных. Включите NCQ с длинной очередью. Для HDD выберите планировщик mq-deadline или CFQ, а для SSD — noop. Не уменьшайте значение параметра ‘readahead’. Для HDD включите кэш записи. Убедитесь, что fstrim включён для дисков NVME и SSD в вашей ОС (обычно это реализуется с помощью задания cron или сервиса systemd).

Файловая система

Ext4 — самый надёжный вариант. Укажите параметр монтирования noatime. XFS тоже хорошо подходит. Большинство других файловых систем также должны работать без проблем. FAT-32 и exFAT не поддерживаются из-за отсутствия жёстких ссылок. Не используйте файловые системы со сжатием, потому что ClickHouse сам выполняет сжатие и делает это лучше. Не рекомендуется использовать зашифрованные файловые системы, так как вместо этого можно использовать встроенное в ClickHouse шифрование, которое работает лучше. Хотя ClickHouse может работать через NFS, это не лучший вариант.

Ядро Linux

Не используйте устаревшее ядро Linux.

Сеть

Если вы используете IPv6, увеличьте размер кэша маршрутов. В ядре Linux до версии 3.2 было множество проблем с реализацией IPv6. По возможности используйте сеть со скоростью не менее 10 Гбит/с. 1 Гбит/с тоже подойдёт, но это будет значительно хуже для синхронизации реплик с десятками терабайт данных или для обработки распределённых запросов с большим объёмом промежуточных данных.

Большие страницы памяти

Всегда устанавливайте transparent huge pages в режим madvise. На старых ядрах (до 5.9) THP в режиме always может вызывать заметное снижение производительности — ядро тратит слишком много времени на дефрагментацию памяти, особенно в системах с 64 GB+ оперативной памяти. В ядре 5.9 появилась проактивная компакция, которая значительно лучше работает с THP, однако ClickHouse по-прежнему выводит предупреждение при запуске, если THP установлен в always, поэтому madvise остаётся рекомендуемым значением независимо от версии ядра.
Если вы хотите навсегда изменить настройку transparent huge pages, отредактируйте /etc/default/grub, добавив transparent_hugepage=madvise в параметр GRUB_CMDLINE_LINUX_DEFAULT:
После этого выполните команду sudo update-grub, затем перезагрузите систему, чтобы изменения вступили в силу.

Конфигурация гипервизора

Если вы используете OpenStack, задайте
в nova.conf. Если вы используете libvirt, укажите
в XML-конфигурации. Это необходимо, чтобы ClickHouse мог получать корректные данные через инструкцию cpuid. В противном случае возможны аварийные завершения с ошибкой Illegal instruction, если гипервизор запущен на старых моделях процессоров.

ClickHouse Keeper и ZooKeeper

Для кластеров ClickHouse рекомендуется использовать ClickHouse Keeper вместо ZooKeeper. См. документацию по ClickHouse Keeper Если вы хотите продолжать использовать ZooKeeper, лучше взять свежую версию ZooKeeper — 3.4.9 или новее. Версия в стабильных дистрибутивах Linux может быть устаревшей. Никогда не используйте написанные вручную скрипты для передачи данных между разными кластерами ZooKeeper, потому что для последовательных узлов результат будет некорректным. По той же причине никогда не используйте утилиту “zkcopy”: https://github.com/ksprojects/zkcopy/issues/15 Если вы хотите разделить существующий кластер ZooKeeper на два, правильный способ — увеличить число его реплик, а затем перенастроить его в два независимых кластера. Вы можете запускать ClickHouse Keeper на том же сервере, что и ClickHouse, в тестовых средах или в средах с низкой скоростью ингестии. Для production-сред мы рекомендуем использовать отдельные серверы для ClickHouse и ZooKeeper/Keeper либо размещать файлы ClickHouse и файлы Keeper на разных дисках. Это связано с тем, что ZooKeeper/Keeper очень чувствительны к задержкам диска, а ClickHouse может использовать все доступные системные ресурсы. В ансамбле ZooKeeper могут быть наблюдатели, но серверы ClickHouse не должны с ними взаимодействовать. Не изменяйте настройку minSessionTimeout, большие значения могут повлиять на стабильность перезапуска ClickHouse. При настройках по умолчанию ZooKeeper — это бомба замедленного действия:
Сервер ZooKeeper не будет удалять файлы старых снимков и журналов при использовании конфигурации по умолчанию (см. autopurge), и это является обязанностью оператора.
Эту бомбу необходимо обезвредить. Приведённая ниже конфигурация ZooKeeper (3.5.1) используется в крупной production-среде: zoo.cfg:
Версия на Java:
Параметры JVM:
Инициализация Salt:

Антивирусное ПО

Если вы используете антивирусное ПО, настройте его так, чтобы оно исключало из проверки каталоги с файлами данных ClickHouse (/var/lib/clickhouse), иначе производительность может снизиться, и во время ингестии данных и фоновых слияний могут возникать неожиданные ошибки.
Последнее изменение 12 июня 2026 г.