本页不适用于 ClickHouse Cloud。本文所述流程在 ClickHouse Cloud 服务中已实现自动化。
CPU 扩缩容调控器
performance 扩缩容调控器。对于持续高负载场景,on-demand 扩缩容调控器的效果会差很多。
CPU 限制
dmesg 查看 CPU 的时钟频率是否因过热而受到限制。
这种限制也可能由外部在数据中心层面设置。你可以在负载状态下使用 turbostat 对其进行监控。
RAM
cat /proc/sys/vm/overcommit_memory 的值应为 0 或 1。运行
perf top 观察内核在内存管理上耗费的时间。
也无需分配永久大页。
使用少于 16GB RAM 的环境
- 在
config.xml中调小标记缓存的大小。它最低可设置为 500 MB,但不能设为零。 - 将查询处理线程数降到
1。 - 将
max_block_size调小到8192。低至1024的值在实际中也仍然可行。 - 将
max_download_threads调低到1。 - 将
input_format_parallel_parsing和output_format_parallel_formatting设为0。 - 禁用向日志表写入,因为这会让后台 合并 任务持续预留 RAM 来执行日志表的 合并。禁用
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 组合使用,都是实践较少的方案,也更容易出错
(例如选择了错误的 chunk 大小、chunks 未对齐、选错 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。
对于大多数 RAID 配置,64 KB 的块大小已经足够。clickhouse-server 的平均写入大小约为 1 MB (1024 KB) ,因此建议的 stripe 大小也为 1 MB。如有需要,可将块大小设置为 1 MB 除以 RAID 阵列中非奇偶校验磁盘的数量,以进一步优化,从而使每次写入都能并行分发到所有可用的非奇偶校验磁盘上。
切勿将块大小设置得过小或过大。
你可以在 SSD 上使用 RAID-0。
无论是否使用 RAID,都应始终使用复制来确保数据安全。
启用具有较长队列的 NCQ。对于 HDD,选择 mq-deadline 或 CFQ 调度器;对于 SSD,选择 noop。不要调低 readahead 设置。
对于 HDD,启用写缓存。
确保你的操作系统已为 NVME 和 SSD 磁盘启用 fstrim (通常通过 cron 作业或 systemd 服务实现) 。
文件系统
noatime。XFS 也同样适用。
大多数其他文件系统通常也都可以正常使用。
由于不支持硬链接,FAT-32 和 exFAT 不受支持。
不要使用压缩文件系统,因为 ClickHouse 自身就具备压缩能力,而且效果更好。
也不建议使用加密文件系统,因为 ClickHouse 提供了更好的内置加密功能。
虽然 ClickHouse 可以运行在 NFS 上,但这并不是最佳选择。
Linux 内核
网络
Huge Pages
madvise。在较旧的内核 (5.9 之前) 中,将 THP 设为 always 可能会导致明显的性能下降——内核会花费大量时间进行内存碎片整理,尤其是在 RAM 达到 64 GB 以上的系统上。内核 5.9 引入了主动合并整理机制,对 THP 的处理改进了很多;但如果 THP 设为 always,ClickHouse 仍会在启动时发出警告,因此无论内核版本如何,仍推荐使用 madvise。
/etc/default/grub,并在 GRUB_CMDLINE_LINUX_DEFAULT 选项中添加 transparent_hugepage=madvise:
sudo update-grub 命令,然后重启使更改生效。
虚拟机监控程序配置
nova.conf 中。
如果使用 libvirt,请设置
cpuid 指令获取正确信息非常重要。
否则,如果虚拟机监控程序运行在较旧的 CPU 型号上,可能会因 Illegal instruction 而崩溃。
ClickHouse Keeper 和 ZooKeeper
minSessionTimeout 设置,过大的值可能会影响 ClickHouse 重启时的稳定性。
在默认设置下,ZooKeeper 就像一颗定时炸弹:
使用默认配置时,ZooKeeper server 不会删除旧 snapshots 和 logs 文件 (参见 autopurge) ,而这属于 operator 的职责。
必须拆除这颗炸弹。
下面的 ZooKeeper (3.5.1) 配置用于大型生产环境:
zoo.cfg:
防病毒软件
/var/lib/clickhouse) ,否则可能会导致性能下降,并在数据摄取和后台合并期间出现意外错误。