使用建议
本页面不适用于 ClickHouse Cloud。此处记录的过程在 ClickHouse Cloud 服务中是自动化的。
CPU Scaling Governor
始终使用 performance
调节器。on-demand
调节器在不断高需求的情况下表现更差。
CPU Limitations
处理器可能会过热。使用 dmesg
查看 CPU 的时钟频率是否因为过热而被限制。
这种限制也可以在数据中心级别进行外部设置。您可以使用 turbostat
在负载下监控它。
RAM
对于少量数据(压缩后约 200 GB),最好使用与数据量相同的内存。 对于大量数据和处理交互(在线)查询时,您应该使用合理数量的 RAM(128 GB 或更多),以便热数据子集能够适应页面的缓存。 即使对于每台服务器约 50 TB 的数据量,使用 128 GB 的 RAM 与 64 GB 相比,查询性能显著提高。
请勿禁用过量分配。值 cat /proc/sys/vm/overcommit_memory
应为 0 或 1。运行
使用 perf top
观察内核在内存管理中花费的时间。
永久大页也不需要分配。
使用少于 16GB 的 RAM
推荐的 RAM 数量为 32 GB 或更多。
如果您的系统 RAM 少于 16 GB,您可能会遇到各种内存异常,因为默认设置与该数量的内存不匹配。您可以在具有少量 RAM 的系统中使用 ClickHouse(低至 2 GB),但这些设置需要额外调优,且只能以较低速率接收数据。
当使用少于 16GB 的 RAM 的 ClickHouse 时,我们建议如下:
- 在
config.xml
中降低标记缓存的大小。可以设置为低至 500 MB,但不能设置为零。 - 将查询处理线程的数量降低到
1
。 - 将
max_block_size
降低到8192
。可以低至1024
的值仍然可以实用。 - 将
max_download_threads
降低到1
。 - 将
input_format_parallel_parsing
和output_format_parallel_formatting
设置为0
。
额外说明:
- 要刷新内存分配器缓存的内存,可以运行
SYSTEM JEMALLOC PURGE
命令。 - 我们不建议在低内存机器上使用 S3 或 Kafka 集成,因为它们需要大量内存用于缓冲区。
Storage Subsystem
如果您的预算允许,请使用 SSD。 如果不行,请使用 HDD。7200 RPM 的 SATA HDD 也可以。
优先选择多台本地硬盘的服务器,而不是少量附带磁盘架的服务器。 但是对于存储查询较少的归档,磁盘架将起作用。
RAID
使用 HDD 时,可以组合成 RAID-10、RAID-5、RAID-6 或 RAID-50。
对于 Linux 软件 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 KB 的块大小对大多数 RAID 配置都是足够的。平均 clickhouse-server 写入大小约为 1 MB(1024 KB),因此建议的条带大小也为 1 MB。如果需要,块大小可以优化为 1 MB 除以 RAID 阵列中非奇偶校验磁盘的数量,以便每次写入在所有可用的非奇偶校验磁盘上并行化。 请勿将块大小设置得过小或过大。
您可以在 SSD 上使用 RAID-0。 无论是否使用 RAID,始终使用复制以确保数据安全。
启用带有长队列的 NCQ。对于 HDD,选择 mq-deadline 或 CFQ 调度器,对于 SSD,选择 noop。请勿减少 'readahead' 设置。 对于 HDD,启用写缓存。
确保在您的操作系统中启用 fstrim
,用于 NVME 和 SSD 磁盘(通常是通过定时作业或 systemd 服务实现)。
File System
Ext4 是最可靠的选择。设置挂载选项为 noatime
。XFS 也表现良好。
大多数其他文件系统也应该可以正常工作。
由于缺少硬链接,FAT-32 和 exFAT 不受支持。
请勿使用压缩文件系统,因为 ClickHouse 自行进行更好的压缩。 不建议使用加密文件系统,因为您可以在 ClickHouse 中使用内置加密功能,从而更为优越。
虽然 ClickHouse 可以在 NFS 上工作,但并不推荐。
Linux Kernel
请勿使用过时的 Linux 内核。
Network
如果您使用 IPv6,请增加路由缓存的大小。 3.2 之前的 Linux 内核在 IPv6 实现上存在众多问题。
如果可能,请使用至少 10 GB 的网络。1 Gb 也可以工作,但在使用数十 TB 数据进行修补副本或处理大量中间数据的分布式查询时会表现更差。
Huge Pages
如果您使用旧版 Linux 内核,请禁用透明大页。它干扰内存分配器,导致显著的性能下降。 在较新版本的 Linux 内核上,透明大页是可以的。
如果您希望永久修改透明大页设置,请编辑 /etc/default/grub
,将 transparent_hugepage=madvise
添加到 GRUB_CMDLINE_LINUX_DEFAULT
选项:
之后,运行 sudo update-grub
命令,然后重启以生效。
Hypervisor configuration
如果您使用 OpenStack,请在 nova.conf
中设置
Java 版本:
JVM 参数:
Salt 初始化:
Antivirus software
如果您使用防病毒软件,请将其配置为跳过包含 ClickHouse 数据文件的文件夹(/var/lib/clickhouse
),否则可能会降低性能,并可能在数据接收和后台合并期间出现意外错误。