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
|
CPU
|
||||||
|
---
|
||||||
|
|
||||||
SSE 4.2 instruction set support is required. Most recent (since 2008) CPUs have this instruction set.
|
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.
|
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.
|
For example, 16 cores with 2600 MHz is better than 8 cores with 3600 MHz.
|
||||||
|
|
||||||
|
|
||||||
Hyper-Threading
|
Hyper-Threading
|
||||||
|
---------------
|
||||||
|
|
||||||
Don't disable hyper-threading. Some queries will benefit from hyper-threading and some will not.
|
Don't disable hyper-threading. Some queries will benefit from hyper-threading and some will not.
|
||||||
|
|
||||||
|
|
||||||
Turbo-Boost
|
Turbo-Boost
|
||||||
|
-----------
|
||||||
|
|
||||||
Don't disable turbo-boost. It will do significant performance gain on typical load.
|
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
|
CPU scaling governor
|
||||||
|
--------------------
|
||||||
|
|
||||||
Always use 'performance' scaling governor. 'ondemand' scaling governor performs much worse even on constantly high demand.
|
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
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||||
|
|
||||||
|
|
||||||
CPU throttling
|
CPU throttling
|
||||||
|
--------------
|
||||||
Your CPU could be overheated. Use 'dmesg' to show if it was thermal throttled.
|
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 power capped in datacenter. Use ``turbostat`` tool under load to monitor that.
|
||||||
|
|
||||||
|
|
||||||
RAM
|
RAM
|
||||||
|
---
|
||||||
|
|
||||||
For small amount of data (up to ~200 GB compressed) prefer to use as much RAM as data volume.
|
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.
|
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
|
Swap
|
||||||
|
----
|
||||||
|
|
||||||
Disable swap. The only possible reason to not disable swap is when you are running ClickHouse on your personal laptop/desktop.
|
Disable swap. The only possible reason to not disable swap is when you are running ClickHouse on your personal laptop/desktop.
|
||||||
|
|
||||||
|
|
||||||
Huge pages
|
Huge pages
|
||||||
|
----------
|
||||||
|
|
||||||
Disable transparent huge pages. It interfers badly with memory allocators, leading to major performance degradation.
|
Disable transparent huge pages. It interferes 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.
|
.. 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.
|
Don't allocate permanent huge pages.
|
||||||
|
|
||||||
|
|
||||||
Storage subsystem
|
Storage subsystem
|
||||||
|
-----------------
|
||||||
|
|
||||||
If you could afford SSD, use SSD.
|
If you could afford SSD, use SSD.
|
||||||
Otherwise use HDD. SATA HDDs 7200 RPM are Ok.
|
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.
|
Of course you could use huge disk shelves for archive storage with rare queries.
|
||||||
|
|
||||||
|
|
||||||
RAID
|
RAID
|
||||||
|
----
|
||||||
|
|
||||||
When using HDDs, you could use RAID-10, RAID-5, RAID-6 or RAID-50.
|
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.
|
Use Linux software RAID (``mdadm``). Better to not use LVM.
|
||||||
When creating RAID-10, choose 'far' layout.
|
When creating RAID-10, choose ``far`` layout.
|
||||||
Prefer RAID-10 if you could afford it.
|
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.
|
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.
|
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.
|
Chunk size 1024K is Ok for all RAID configurations.
|
||||||
Never use too small or too large chunk sizes.
|
Never use too small or too large chunk sizes.
|
||||||
@ -84,20 +103,22 @@ Enable write cache on HDDs.
|
|||||||
|
|
||||||
|
|
||||||
Filesystem
|
Filesystem
|
||||||
|
----------
|
||||||
|
|
||||||
Ext4 is Ok. Mount with noatime,nobarrier.
|
Ext4 is Ok. Mount with ``noatime,nobarrier``.
|
||||||
XFS is Ok too, but less tested with ClickHouse.
|
XFS is Ok too, but less tested with ClickHouse.
|
||||||
Most other filesystems should work fine. Filesystems with delayed allocation are better.
|
Most other filesystems should work fine. Filesystems with delayed allocation are better.
|
||||||
|
|
||||||
|
|
||||||
Linux kernel
|
Linux kernel
|
||||||
|
------------
|
||||||
|
|
||||||
Don't use too old Linux kernel. For example, on 2015, 3.18.19 is Ok.
|
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
|
You could use Yandex kernel: https://github.com/yandex/smart which gives at least 5% performance increase.
|
||||||
- it gives at least 5% performance increase.
|
|
||||||
|
|
||||||
|
|
||||||
Network
|
Network
|
||||||
|
-------
|
||||||
|
|
||||||
When using IPv6, you must increase route cache.
|
When using IPv6, you must increase route cache.
|
||||||
Linux kernels before 3.2 has awful bugs in IPv6 implementation.
|
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
|
ZooKeeper
|
||||||
|
---------
|
||||||
|
|
||||||
Probably you already have ZooKeeper for another purposes.
|
Probably you already have ZooKeeper for another purposes.
|
||||||
It's Ok to use existing ZooKeeper installation if it is not overloaded.
|
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:
|
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.
|
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