mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-23 10:10:50 +00:00
Move operation tips to main reference
This commit is contained in:
parent
3b25915cf2
commit
bb9d5f3958
@ -1,38 +1,45 @@
|
||||
ClickHouse administration tips.
|
||||
|
||||
Operations Tips
|
||||
===============
|
||||
|
||||
CPU
|
||||
---
|
||||
|
||||
SSE 4.2 instruction set support is required. Most recent (since 2008) CPUs have this instruction set.
|
||||
|
||||
When choosing between CPU with more cores and slightly less frequency and CPU with less cores and more frequency, choose first.
|
||||
For example, 16 cores with 2600 MHz is better than 8 cores with 3600 MHz.
|
||||
|
||||
|
||||
Hyper-Threading
|
||||
---------------
|
||||
|
||||
Don't disable hyper-threading. Some queries will benefit from hyper-threading and some will not.
|
||||
|
||||
|
||||
Turbo-Boost
|
||||
-----------
|
||||
|
||||
Don't disable turbo-boost. It will do significant performance gain on typical load.
|
||||
Use 'turbostat' tool to show real CPU frequency under load.
|
||||
Use ``turbostat`` tool to show real CPU frequency under load.
|
||||
|
||||
|
||||
CPU scaling governor
|
||||
--------------------
|
||||
|
||||
Always use 'performance' scaling governor. 'ondemand' scaling governor performs much worse even on constantly high demand.
|
||||
sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
Always use ``performance`` scaling governor. ``ondemand`` scaling governor performs much worse even on constantly high demand.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
|
||||
|
||||
CPU throttling
|
||||
|
||||
Your CPU could be overheated. Use 'dmesg' to show if it was thermal throttled.
|
||||
Your CPU could be power capped in datacenter. Use 'turbostat' tool under load to monitor that.
|
||||
--------------
|
||||
Your CPU could be overheated. Use ``dmesg`` to show if it was thermal throttled.
|
||||
Your CPU could be power capped in datacenter. Use ``turbostat`` tool under load to monitor that.
|
||||
|
||||
|
||||
RAM
|
||||
---
|
||||
|
||||
For small amount of data (up to ~200 GB compressed) prefer to use as much RAM as data volume.
|
||||
For larger amount of data, if you run interactive (online) queries, use reasonable amount of RAM (128 GB or more) to hot data fit in page cache.
|
||||
@ -40,38 +47,50 @@ Even for data volumes of ~50 TB per server, using 128 GB of RAM is much better f
|
||||
|
||||
|
||||
Swap
|
||||
----
|
||||
|
||||
Disable swap. The only possible reason to not disable swap is when you are running ClickHouse on your personal laptop/desktop.
|
||||
|
||||
|
||||
Huge pages
|
||||
----------
|
||||
|
||||
Disable transparent huge pages. It interfers badly with memory allocators, leading to major performance degradation.
|
||||
echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
|
||||
Use 'perf top' to monitor time spent in kernel on doing memory management.
|
||||
Disable transparent huge pages. It interferes badly with memory allocators, leading to major performance degradation.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
|
||||
|
||||
Use ``perf top`` to monitor time spent in kernel on doing memory management.
|
||||
Don't allocate permanent huge pages.
|
||||
|
||||
|
||||
Storage subsystem
|
||||
-----------------
|
||||
|
||||
If you could afford SSD, use SSD.
|
||||
Otherwise use HDD. SATA HDDs 7200 RPM are Ok.
|
||||
|
||||
Prefer more servers with inplace storage to less servers with huge disk shelves.
|
||||
Prefer more servers with in place storage to less servers with huge disk shelves.
|
||||
Of course you could use huge disk shelves for archive storage with rare queries.
|
||||
|
||||
|
||||
RAID
|
||||
----
|
||||
|
||||
When using HDDs, you could use RAID-10, RAID-5, RAID-6 or RAID-50.
|
||||
Use Linux software RAID (mdadm). Better to not use LVM.
|
||||
When creating RAID-10, choose 'far' layout.
|
||||
Use Linux software RAID (``mdadm``). Better to not use LVM.
|
||||
When creating RAID-10, choose ``far`` layout.
|
||||
Prefer RAID-10 if you could afford it.
|
||||
|
||||
Don't use RAID-5 on more than 4 HDDs - use RAID-6 or RAID-50. RAID-6 is better.
|
||||
When using RAID-5, RAID-6, or RAID-50, always increase stripe_cache_size, because default setting is awful.
|
||||
echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size
|
||||
Exact number is calculated from number of devices and chunk size: 2 * num_devices * chunk_size_in_bytes / 4096.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size
|
||||
|
||||
Exact number is calculated from number of devices and chunk size: ``2 * num_devices * chunk_size_in_bytes / 4096``.
|
||||
|
||||
Chunk size 1024K is Ok for all RAID configurations.
|
||||
Never use too small or too large chunk sizes.
|
||||
@ -84,20 +103,22 @@ Enable write cache on HDDs.
|
||||
|
||||
|
||||
Filesystem
|
||||
----------
|
||||
|
||||
Ext4 is Ok. Mount with noatime,nobarrier.
|
||||
Ext4 is Ok. Mount with ``noatime,nobarrier``.
|
||||
XFS is Ok too, but less tested with ClickHouse.
|
||||
Most other filesystems should work fine. Filesystems with delayed allocation are better.
|
||||
|
||||
|
||||
Linux kernel
|
||||
------------
|
||||
|
||||
Don't use too old Linux kernel. For example, on 2015, 3.18.19 is Ok.
|
||||
You could use Yandex kernel: https://github.com/yandex/smart
|
||||
- it gives at least 5% performance increase.
|
||||
You could use Yandex kernel: https://github.com/yandex/smart which gives at least 5% performance increase.
|
||||
|
||||
|
||||
Network
|
||||
-------
|
||||
|
||||
When using IPv6, you must increase route cache.
|
||||
Linux kernels before 3.2 has awful bugs in IPv6 implementation.
|
||||
@ -106,12 +127,15 @@ Prefer at least 10 Gbit network. 1 Gbit will also work, but much worse for repai
|
||||
|
||||
|
||||
ZooKeeper
|
||||
---------
|
||||
|
||||
Probably you already have ZooKeeper for another purposes.
|
||||
It's Ok to use existing ZooKeeper installation if it is not overloaded.
|
||||
|
||||
Use recent version of ZooKeeper. At least 3.5 is Ok. Version in your linux package repository might be outdated.
|
||||
Use recent version of ZooKeeper. At least 3.5 is Ok. Version in your Linux package repository might be outdated.
|
||||
|
||||
With default settings, ZooKeeper have time bomb:
|
||||
"A ZooKeeper server will not remove old snapshots and log files when using the default configuration (see autopurge below), this is the responsibility of the operator."
|
||||
|
||||
A ZooKeeper server will not remove old snapshots and log files when using the default configuration (see autopurge below), this is the responsibility of the operator.
|
||||
|
||||
You need to defuse the bomb.
|
141
doc/reference/ru/operations/tips.rst
Normal file
141
doc/reference/ru/operations/tips.rst
Normal file
@ -0,0 +1,141 @@
|
||||
Советы по эксплуатации
|
||||
======================
|
||||
|
||||
Процессор
|
||||
---------
|
||||
|
||||
Требуется поддержка набора инструкций SSE 4.2. Современные процессоры (с 2008 года) его поддерживают.
|
||||
|
||||
При выборе между процессорами с большим числом ядер с немного меньшей тактовой частотой и процессором с меньшим числом ядер с высокой тактовой частотой, первый вариант более предпочтителен.
|
||||
Например, 16 ядер с 2600 MHz лучше, чем 8 ядер 3600 MHz.
|
||||
|
||||
Hyper-Threading
|
||||
---------------
|
||||
|
||||
Hyper-threading лучше не отключать. Некоторые запросам он помогает, а некоторым — нет.
|
||||
|
||||
|
||||
Turbo-Boost
|
||||
-----------
|
||||
|
||||
Turbo-Boost крайне не рекомендуется отключать. При типичной нагрузке он значительно улучшает производительность.
|
||||
Можно использовать ``turbostat`` для просмотра реальной тактовой частоты процессора под нагрузкой.
|
||||
|
||||
|
||||
CPU scaling governor
|
||||
--------------------
|
||||
|
||||
Нужно всегда использовать ``performance`` scaling governor. ``ondemand`` scaling governor работает намного хуже при постоянно высоком спросе.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
|
||||
|
||||
Ограничение CPU
|
||||
---------------
|
||||
Процессоры могут перегреваться. С помощью ``dmesg`` можно увидеть, если тактовая частота процессора была ограничена из-за перегрева.
|
||||
Также ограничение может устанавливаться снаружи на уровне датацентра. С помощью ``turbostat`` можно за этим наблюдать под нагрузкой.
|
||||
|
||||
|
||||
Оперативная память
|
||||
------------------
|
||||
|
||||
Для небольших объемов данных (до ~200 Гб в сжатом виде) лучше всего использовать столько памяти не меньше, чем объем данных.
|
||||
Для больших объемов данных, при выполнении интерактивных (онлайн) запросов, стоит использовать разумный объем оперативной памяти (128 Гб или более) для того, чтобы горячее подмножество данных поместилось в кеше страниц.
|
||||
Даже для объемов данных в ~50 Тб на сервер, использование 128 Гб оперативной памяти намного лучше для производительности выполнения запросов, чем 64 Гб.
|
||||
|
||||
|
||||
Файл подкачки
|
||||
-------------
|
||||
|
||||
Всегда отключайте файл подкачки. Единственной причиной этого не делать может быть только использование ClickHouse на личном ноутбуке.
|
||||
|
||||
|
||||
Huge pages
|
||||
----------
|
||||
|
||||
Механизм прозрачных huge pages нужно отключить. Он мешает работе аллокаторов памяти, что приводит к значительной деградации производительности.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
|
||||
|
||||
С помощью ``perf top`` можно наблюдать за временем, проведенном в ядре операционной системы для управления памятью.
|
||||
Постоянные huge pages так же не нужно аллоцировать.
|
||||
|
||||
|
||||
Подсистема хранения
|
||||
-------------------
|
||||
|
||||
Если ваш бюджет позволяет использовать SSD, используйте SSD.
|
||||
В противном случае используйте HDD. SATA HDDs 7200 RPM подойдут.
|
||||
|
||||
Предпочитайте много серверов с локальными жесткими дисками вместо меньшего числа серверов с подключенными дисковыми полками.
|
||||
Но для хранения архивов с редкими запросами полки всё же подходят.
|
||||
|
||||
|
||||
RAID
|
||||
----
|
||||
|
||||
При использовании HDD можно объединить их RAID-10, RAID-5, RAID-6 или RAID-50.
|
||||
Лучше использовать программный RAID в Linux (``mdadm``). Лучше не использовать LVM.
|
||||
При создании RAID-10, нужно выбрать ``far`` расположение.
|
||||
Если бюджет позволяет, лучше выбрать RAID-10.
|
||||
|
||||
На более чем 4 дисках вместо RAID-5 нужно использовать RAID-6 (предпочтительнее) или RAID-50.
|
||||
При использовании RAID-5, RAID-6 или RAID-50, нужно всегда увеличивать stripe_cache_size, так как значение по умолчанию выбрано не самым удачным образом.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size
|
||||
|
||||
Точное число стоит вычислять из числа устройств и размер блока по формуле: ``2 * num_devices * chunk_size_in_bytes / 4096``.
|
||||
|
||||
Размер блока в 1024 Кб подходит для всех конфигураций RAID.
|
||||
Никогда не указывайте слишком маленький или слишком большой размер блока.
|
||||
|
||||
|
||||
На SSD можно использовать RAID-0.
|
||||
Вне зависимости от использования RAID, всегда используйте репликацию для безопасности данных.
|
||||
|
||||
Включите NCQ с длинной очередью. Для HDD стоит выбрать планировщик CFQ, а для SSD — noop. Не стоит уменьшать настройку readahead.
|
||||
На HDD стоит включать write ahread.
|
||||
|
||||
|
||||
Файловая система
|
||||
----------------
|
||||
|
||||
Ext4 — самый проверенный вариант, стоит указывать опции монтирования ``noatime,nobarrier``.
|
||||
XFS также подходит, но не так тщательно протестирована в сочитании с ClickHouse.
|
||||
Большинство других файловых систем также должны нормально работать. Файловые системы с отложенной аллокацией работают лучше.
|
||||
|
||||
|
||||
Ядро Linux
|
||||
----------
|
||||
|
||||
Не используйте слишком старое ядро Linux. В 2015 году 3.18.19 — достаточно свежее.
|
||||
Рассмотрите возможность использования сборки ядра от Яндекса: https://github.com/yandex/smart — это дает прирост в производительности не менее 5%.
|
||||
|
||||
|
||||
Сеть
|
||||
----
|
||||
|
||||
При использовании IPv6, стоит увеличить размер кеша маршрутов.
|
||||
Ядра Linux до 3.2 имели массу проблем в реализации IPv6.
|
||||
|
||||
Предпочитайте как минимум 10 Гбит сеть. 1 Гбит также будет работать, но намного хуже для починки реплик с десятками терабайт данных или для обработки распределенных запросов с большим объемом промежуточных данных.
|
||||
|
||||
|
||||
ZooKeeper
|
||||
---------
|
||||
|
||||
Вероятно вы уже используете ZooKeeper для других целей. Можно использовать ту же инсталляцию ZooKeeper, если она не сильно перегружена.
|
||||
|
||||
Лучше использовать свежую версию ZooKeeper, как минимум 3.5. Версия в стабильных дистрибутивах Linux может быть устаревшей.
|
||||
|
||||
С настройками по умолчанию, ZooKeeper является бомбой замедленного действия:
|
||||
|
||||
Сервер ZooKeeper не будет удалять файлы со старыми снепшоты и логами при использовании конфигурации по умолчанию (см. autopurge), это является ответственностью оператора.
|
||||
|
||||
Эту бомбу нужно обезвредить.
|
Loading…
Reference in New Issue
Block a user