更新时间:2024-12-11 GMT+08:00

ClickHouse参数调优实践

表1 ClickHouse参数调优汇总

参数名

参数描述

默认值

建议值

是否需要重启生效

max_memory_usage_for_all_queries

单台服务器上所有查询的内存使用量,默认没有限制。建议根据机器的总内存,预留一部分空间,防止内存不够导致服务或者机器异常。

0

机器总内存的80%

max_memory_usage

单个查询在单台服务器的能使用的最大内存。

10G

50GB

否(新版本可通过多租户方式配置)

max_bytes_before_external_group_by

确定了在GROUP BY中启动将临时数据转存到磁盘上的内存阈值。默认值为0表示这项功能将被禁用。一般:设置为max_memory_usage/2。

0

25GB

max_execution_time

单次查询耗时的最长时间,单位为秒。默认没有限制。

0

300

max_threads

执行请求的最大线程数。默认情况下是按照机器CPU核数自动确定的。单并发情况下线程数越大越好(该值要小于CPU核数),多并发情况建议设置为CPU核数/2的值。

CPU核数/2

64

max_result_rows

限制返回结果行数,默认为0不限制。

0

100000

distributed_product_mode

默认SQL中的子查询不允许使用分布式表,修改为local表示将子查询中对分布式表的查询转换为对应的本地表。

deny

根据场景定:

deny/local/global/allow

background_pool_size

后台用于merge的线程池大小。

16

  • 4u16G:cpu核数
  • 8u32G:cpu核数
  • 16u64G及以上:CPU内核数 * 2

log_queries

system.query_log表的开关。默认值为0,不存在该表。修改为1,系统会自动创建system.query_log表,并记录每次query的日志信息。

0

1

skip_unavailable_shards

当通过分布式表查询时,遇到无效的shard是否跳过。默认值为0表示不跳过,抛异常。设置值为1表示跳过无效shard。

0

建议使用默认值。异常时,调整为1,提供有损服务。

max_bytes_before_external_sort

如果没有足够的内存,可以使用该参数来设置外部排序(在磁盘中创建一些临时文件)。默认为0表示禁用外部排序功能,当内存不够时直接抛错,设置了该值order by可以正常完成,但是速度非常慢。

0

25GB

keep_alive_timeout

服务端与客户端保持长连接的时长,单位为秒。

10

600

max_concurrent_queries

最大支持的查询并发。

100

150

session_timeout_ms

ClickHouse服务和ZooKeeper保持的会话时长,超过该时间ZooKeeper还收不到Clickhouse的心跳信息,会将与Clickhouse的session断开。

3000

120000

max_server_memory_usage_to_ram_ratio

ClickHosueServer默认可使用的系统最大内存比例,小数表示,如0.9表示系统内存的90%。配置不合理可能出现节点OOM导致业务受损。

0.8

  • 4u16G:0.6
  • 8u32G:0.7
  • 16u64G:0.8
  • 32u128G及以上:0.9