当前位置: 首页 > news >正文

一篇文章学会调优 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 压力。

相关文章:

  • 如何创建简单的 Chef Cookbooks 来管理 Ubuntu 上的基础设施
  • MySQL单表查询案例演示
  • 【重学C语言】十四、结构体
  • MES系统主要包括那些功能?
  • CAD插入文字到另一图形样式变相同
  • TikTok Shop认知课 打通TK小店全流程
  • iOS App冷启动优化:Before Main阶段
  • Docker基础(一)
  • freemarker模板引擎结合node puppeteer库实现html生成图片
  • 【算法与数据结构】回溯算法、贪心算法、动态规划、图论(笔记三)
  • 基于java Springboot实现课程评分系统设计和实现
  • 【virtual Box】功能速通:安装 Windows 和 Ubuntu
  • (41)Verilog实现递归功能
  • 【数据结构1】数据结构的基本概念
  • 【通信原理】数字基带传输的线路码型
  • 最短路径(Dijkstra算法与Floyd算法)
  • Redis原理篇——内存回收
  • MongoDB入门与实战-第五章-MongoDB副本集
  • 40 个机器学习面试问题(文末福利送书)
  • ACM第三周---周训---题目合集.
  • JavaScript算法41- 回环句(leetCode:6253easy)周赛
  • My Ninety-fifth Page - 最大子序和 - By Nicolas
  • 实现java类型和JDBC类型的相互转换 - 使用BaseTypeHandler实现数据库某一个字段的嵌套json的解析(不定数量的key-value键值对)
  • [附源码]JAVA毕业设计科大学生党员之家设计(系统+LW)
  • [附源码]计算机毕业设计校友社交系统Springboot程序
  • [Swift]国际化
  • SAR信号处理基础2——线性调频信号频谱与驻定相位原理
  • 每日一题:斐波那契数列
  • [附源码]计算机毕业设计贵港高铁站志愿者服务平台
  • 指标与标签的区别?
  • 1550_AURIX_TC275_锁相环的操作
  • Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战