ClickHouse参数调优实践
参数分类 | 参数名称 | 参数描述 | 默认值 | 建议值 |
|---|---|---|---|---|
BIOS调优 | CPU预取 | CPU将内存中的数据读到CPU的高速缓冲Cache时,会根据局部性原理,除了读取本次要访问的数据,还会预取本次数据的周边数据到Cache里面,如果预取的数据是下次要访问的数据,那么性能会提升,如果预取的数据不是下次要取的数据,那么会浪费内存带宽。 对于数据比较集中的场景,预取的命中率高,适合打开CPU预取,反之需要关闭CPU预取。 目前发现speccpu和X265软件场景适合打开CPU预取,STREAM测试工具、Nginx和数据库场景需要关闭CPU预取。 | 未开启预取 | 开启CPU预取 |
性能模式 | CPU性能算力强相关场景,该模式下无动态调频,固定运行在标称频率,会增加功耗开销。 | 未开启性能模式 | 开启性能模式 | |
内存刷新频率 | 适当调低内存刷新频率可以提高内存工作效率。 | AUTO | 64ms | |
SMMU参数 | 关闭SMMU可减少内存访问延迟,降低开销,简化内存管理。 | 启用SMMU | 关闭SMMU | |
OS调优 | 透明大页 | 在openEuler 20.03上透明大页是默认开启的,关闭后可以获得不错的性能提升。 | 启用透明大页 | 关闭透明大页 |
ClickHouse调优 | max_threads | 修改配置参数max_threads,设置为不同的值可能获得优化效果。 由于X86物理核数较少,且超线程基于同一个物理核,该优化对X86效果不显著。由于鲲鹏物理核数较多,跨NUMA使用内存数据量较多,因此该参数优化效果明显。 | CPU核个数 | 根据业务场景不同,可进行调整,直到性能达到业务目标。根据金融行业经验:
|
参数名 | 参数描述 | 默认值 | 建议值 | 配置方式 | 是否需要重启生效 |
|---|---|---|---|---|---|
max_memory_usage_for_all_queries | 单台服务器上所有查询的内存使用量,默认没有限制。建议根据机器的总内存,预留一部分空间,防止内存不够导致服务或者机器异常。 | 0 | 机器总内存的80% | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.max_memory_usage_for_all_queries。 | 否 |
max_memory_usage | 单个查询在单台服务器的能使用的最大内存。 | 10G | 50GB | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.max_memory_usage。 | 否(新版本可通过多租户方式配置) |
max_bytes_before_external_group_by | 确定了在GROUP BY中启动将临时数据转存到磁盘上的内存阈值。默认值为0表示这项功能将被禁用。一般:设置为max_memory_usage/2。 | 0 | 25GB | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.max_bytes_before_external_group_by。 | 否 |
max_execution_time | 单次查询耗时的最长时间,单位为秒。默认没有限制。 | 0 | 300 | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.max_execution_time。 | 否 |
max_threads | 每个SQL语句执行时请求的最大线程数。默认情况下是按照机器CPU核数自动确定的。单并发情况下线程数越大越好(该值要小于CPU核数),多并发情况建议设置为CPU核数/2的值。在鲲鹏ARM架构下,需根据具体业务模型调优。 | CPU核数/2 | 64 | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.max_threads。 | 否 |
max_result_rows | 限制返回结果行数,默认为0不限制。 | 0 | 100000 | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.max_result_rows。 | 否 |
distributed_product_mode | 默认SQL中的子查询不允许使用分布式表,修改为local表示将子查询中对分布式表的查询转换为对应的本地表。 | deny | 根据场景定: deny/local/global/allow | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.distributed_product_mode。 | 否 |
background_pool_size | 后台用于merge的线程池大小。 | 16 |
| 配置参数界面配置。 | 否 |
max_bytes_before_external_sort | 如果没有足够的内存,可以使用该参数来设置外部排序(在磁盘中创建一些临时文件)。默认为0表示禁用外部排序功能,当内存不够时直接抛错,设置了该值order by可以正常完成,但是速度非常慢。 | 0 | 25GB | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-user-profiles-customize自定义配置profiles.default.max_bytes_before_external_sort。 | 否 |
keep_alive_timeout | 服务端与客户端保持长连接的时长,单位为秒。 | 10 | 80 | 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-config-customize自定义配置keep_alive_timeout | 是 |
max_concurrent_queries | 最大支持的查询并发。 | 100 | 100 | 配置参数界面配置。 | 否 |
session_timeout_ms | ClickHouse服务和ZooKeeper保持的会话时长,超过该时间ZooKeeper还收不到Clickhouse的心跳信息,会将与Clickhouse的session断开。 | 3000 | 60000 | 配置参数界面配置。 | 否 |
max_server_memory_usage_to_ram_ratio | ClickHoseServer默认可使用的系统最大内存比例,小数表示,如0.9表示系统内存的90%。配置不合理可能出现节点OOM导致业务受损。 | 0.8 |
| 配置参数界面存在,则直接配置。如果不存在,则通过clickhouse-config-customize自定义配置max_server_memory_usage_to_ram_ratio。 | 否 |

