Эта страница не применима к ClickHouse Cloud. Описанная здесь процедура в сервисах ClickHouse Cloud выполняется автоматически.
Регулятор управления частотой CPU
performance. Регулятор on-demand работает заметно хуже при стабильно высокой нагрузке.
Ограничения CPU
dmesg, чтобы проверить, не была ли тактовая частота CPU ограничена из-за перегрева.
Ограничение также может устанавливаться извне, на уровне датацентра. Для отслеживания этого под нагрузкой можно использовать turbostat.
Оперативная память
cat /proc/sys/vm/overcommit_memory должно быть 0 или 1. Выполните
perf top, чтобы отслеживать, сколько времени ядро тратит на управление памятью.
Постоянные большие страницы памяти также не нужно выделять.
Использование менее 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 на машинах с небольшим объёмом оперативной памяти, поскольку для буферов им требуется значительный объём памяти.
Подсистема хранения
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).
Файловая система
noatime. XFS тоже хорошо подходит.
Большинство других файловых систем также должны работать без проблем.
FAT-32 и exFAT не поддерживаются из-за отсутствия жёстких ссылок.
Не используйте файловые системы со сжатием, потому что ClickHouse сам выполняет сжатие и делает это лучше.
Не рекомендуется использовать зашифрованные файловые системы, так как вместо этого можно использовать встроенное в ClickHouse шифрование, которое работает лучше.
Хотя ClickHouse может работать через NFS, это не лучший вариант.
Ядро Linux
Сеть
Большие страницы памяти
madvise. На старых ядрах (до 5.9) THP в режиме always может вызывать заметное снижение производительности — ядро тратит слишком много времени на дефрагментацию памяти, особенно в системах с 64 GB+ оперативной памяти. В ядре 5.9 появилась проактивная компакция, которая значительно лучше работает с THP, однако ClickHouse по-прежнему выводит предупреждение при запуске, если THP установлен в always, поэтому madvise остаётся рекомендуемым значением независимо от версии ядра.
/etc/default/grub, добавив transparent_hugepage=madvise в параметр GRUB_CMDLINE_LINUX_DEFAULT:
sudo update-grub, затем перезагрузите систему, чтобы изменения вступили в силу.
Конфигурация гипервизора
nova.conf.
Если вы используете libvirt, укажите
cpuid.
В противном случае возможны аварийные завершения с ошибкой Illegal instruction, если гипервизор запущен на старых моделях процессоров.
ClickHouse Keeper и ZooKeeper
minSessionTimeout, большие значения могут повлиять на стабильность перезапуска ClickHouse.
При настройках по умолчанию ZooKeeper — это бомба замедленного действия:
Сервер ZooKeeper не будет удалять файлы старых снимков и журналов при использовании конфигурации по умолчанию (см. autopurge), и это является обязанностью оператора.
Эту бомбу необходимо обезвредить.
Приведённая ниже конфигурация ZooKeeper (3.5.1) используется в крупной production-среде:
zoo.cfg:
Антивирусное ПО
/var/lib/clickhouse), иначе производительность может снизиться, и во время ингестии данных и фоновых слияний могут возникать неожиданные ошибки.