配置文件
Clickhouse配置项主要在 config.xml 或 users.xml 中, 基本上都在 users.xml 里
- config.xml的配置项: Server Settings | ClickHouse Documentation
- users.xml的配置项 : Settings | ClickHouse Documentation
CPU 资源
配置 | 描述 | 默认值 |
---|---|---|
background_pool_size | 后台线程池的大小,merge 线程就是在该线程池中执行,该线程池 不仅仅是给 merge 线程用的,默认值 16,允许的前提下建议改成 cpu 个数的 2 倍(线程数)。 | 16 |
background_schedule_pool_size | 执行后台任务(复制表、Kafka 流、DNS 缓存更新)的线程数。默 认 128,建议改成 cpu 个数的 2 倍(线程数)。 | 128 |
background_distributed_schedule_ pool_size | 设置为分布式发送执行后台任务的线程数,默认 16,建议改成 cpu 个数的 2 倍(线程数)。 | 16 |
max_concurrent_queries | 最大并发处理的请求数(包含 select,insert 等),默认值 100,推荐 150(不够再加)~300。 | 100 |
max_threads | 设置单个查询所能使用的最大 cpu 个数,默认是 cpu 核数 | cpu 核数 |
内存资源
配置 | 描述 | 默认值 |
---|---|---|
max_memory_usage | 此参数在 users.xml 中,表示单次 Query 占用内存最大值,该值可 以设置的比较大,这样可以提升集群查询的上限。 | 10GB |
max_bytes_before_external_group_ by | 一般按照 max_memory_usage 的一半设置内存,当 group 使用内 存超过阈值后会刷新到磁盘进行。 | 50GB |
max_bytes_before_external_sort | 当 order by 已使用 max_bytes_before_external_sort 内存就进行 溢写磁盘(基于磁盘排序),如果不设置该值,那么当内存不够时直接 抛错,设置了该值 order by 可以正常完成,但是速度相对存内存来 说肯定要慢点(实测慢的非常多,无法接受)。 | |
max_table_size_to_drop max_partition_size_to_drop | 此参数在 config.xml 中,应用于需要删除表或分区的情况,默认是 50GB,意思是如果删除 50GB 以上的分区表会失败。建议修改为 0, 这样不管多大的分区表都可以删除。 | 50GB |
Clickhouse 通用优化参数
配置名 | 推荐配置 | 说明 |
---|---|---|
配置名 | 推荐配置 | 说明 |
max_server_memory_usage_to_ram_ratio | 不推荐0 | 占用物理机内存比例 |
max_memory_usage | 根据单查询内存使用量和并发合理调整 | 单查询最大使用内存量 |
background_pool_size | CPU核心数的两倍 | 后台Merge操作的线程数 |
max_parts_in_total | 1000000 | 单机最大part个数 |
parts_to_delay_insert | 3000 | 单个分区下的活跃part数超过该值后,会延迟新的写入 |
parts_to_throw_insert | 4000 | 单个分区下的活跃part数超过该值后,会丢弃新的写入 |
old_parts_lifetime | 0表示立即删除旧的part,根据业务需求调整 | 后台合并和数据过期后旧的part保留的时间 |
max_concurrent_queries | 根据机器资源调整 | 某个MergeTree的最大查询数 |
max_bytes_before_external_group_by | 推荐开启,具体值为max_memory_usage的一半 | Group by 过程允许数据落盘 |
配置修改生效方式
以修改 max_threads
为例,示范下临时修改与永久修改
临时修改
SET
命令可以修改的变量都存储在 system.settings
表中。表中的 name 和 value 字段均是 String 类型的
使用 clickhouse-client 以 9000 端口,TCP 的方式登录 clickhouse-server,对 max_threads
进行设置
|
全局修改
编辑 vim /etc/clickhouse-server/users.xml,然后进行修改
|
修改后,直接在 clickhouse-client 查询(中途不用退出重进),可以发现数值已经被改变了。
这是因为clickhouse每隔一定的时间,会监控配置文件是否被改变,如果被改变则重新加载各项参数