Created
June 16, 2016 04:10
-
-
Save dblokhin/efe53dd8f6543f63d74053802fae5004 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ClickHouse administration 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. | |
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 | |
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. | |
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. | |
Even for data volumes of ~50 TB per server, using 128 GB of RAM is much better for query performance than 64 GB. | |
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. | |
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. | |
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. | |
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. | |
Chunk size 1024K is Ok for all RAID configurations. | |
Never use too small or too large chunk sizes. | |
On SSDs, you could use RAID-0. | |
Regardless to RAID, always use replication for data safety. | |
Enable NCQ. Use high queue depth. Use CFQ scheduler for HDDs and noop for SSDs. Don't lower readahead setting. | |
Enable write cache on HDDs. | |
Filesystem | |
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. | |
Network | |
When using IPv6, you must increase route cache. | |
Linux kernels before 3.2 has awful bugs in IPv6 implementation. | |
Prefer at least 10 Gbit network. 1 Gbit will also work, but much worse for repairing replicas with tens of terabytes of data and for processing huge distributed queries with much intermediate data. | |
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. | |
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." | |
You need to defuse the bomb. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment