一篇文章学会调优 ClickHouse

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


1. 配置优化

ClickHouse 的通用优化配置如下表所示,大部分配置需要根据线上实际楼况进行优化,具体需要优化的配置可参考官方文档:

https://clickhouse.tech/docs/en/operations/settings/query-complexity

https://clickhouse.tech/docs/en/operations/settings/

配置名推荐配置说明
max_server_memory_usage_to_ram_ratio机器内存的 90%占用物理机内存比例
max_memory_usage根据单查询内存使用量和并发合理调整单查询最大使用内存量
background_pool_sizeCPU 核心数的两倍后台 Merge 操作的线程数
max_parts_in_total1000000单机最大part个数
parts_ to_delay_insert3000单个分区下的活跃 part 数超过该值后,会延迟新的写人 parts_to_throw_insert
old_parts_lifetime0表示立即删除旧的part, 根据业务需求调整后台合并和数据过期后旧的 part 保留的时间
max_ concurrent_queries根据机器资源调整某个 MergeTree 的最大查询数
max_bytes_before_external_group_by推荐开启,具体值为 max_memory_usage 的一半Group by 过程允许数据落盘

2. 查询优化

用户在查询数据时,可以参考如下几点对 SQL 进行优化:

  1. 通过 explain 命令来查看执行计划,确认查询计划是否合理。
  2. 先过滤数据(减少I/O)再进行 join 等操作。
  3. join 操作,大表在前,小表在后。
  4. 建议使用大宽表进行查询,不要进行多次 join。
  5. 业务允许时,可以使用近似函数代替精确函数,例如用 uniq 代替 count distinct
  6. 两张分布式表进行 join 时,可以在写人数据前,按照相同规则分片(shard)到相同节点。
  7. 子查询为分布式表时,需要使用 GLOBAL 关键宇。

3. 表相关优化

用户在创建表时,可以参考如下几点:

  1. 尽量不用 string 类型的字段。
  2. 使用默认值代替空值。
  3. 能进行分区的事实 表尽量进行分区。
  4. 可以使用二级索引。
  5. 业务允许的价况下配器 TTL,删除不必要的数据。
  6. 尽量做 1000 条以上的数据写人,诚少后台 Merge 压力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值