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

ClickHouse CPU 排查快速参考指南

ClickHouse CPU 排查快速参考指南

🚨 故障快速诊断表

故障现象可能原因检查命令正常值异常值
CPU使用率高查询并发过多top -p $(pgrep clickhouse)CPU<70%CPU>90%
CPU使用率高查询复杂度过高clickhouse-client --query "SELECT query_id, query, elapsed, read_rows FROM system.processes"查询时间<1s查询时间>10s
CPU使用率高线程数过多clickhouse-client --query "SELECT * FROM system.processes"并发查询<10并发查询>50
CPU使用率高压缩算法CPU密集clickhouse-client --query "SELECT format, sum(compressed_size) FROM system.parts GROUP BY format"LZ4ZSTD(高CPU)
CPU使用率高后台合并任务clickhouse-client --query "SELECT * FROM system.merges"合并数<5合并数>20
CPU使用率高索引构建clickhouse-client --query "SELECT * FROM system.mutations"无进行中有进行中
CPU使用率高数据导入iostat -x 1%util<70%%util>90%

📋 常用排查命令速查

1. 查看当前运行的查询

# 查看所有正在执行的查询
clickhouse-client --query "SELECT query_id, user, address, query, elapsed, read_rows, read_bytes, memory_usage, formatReadableSize(memory_usage) as memory FROM system.processes ORDER BY elapsed DESC"# 查看查询详情(包含CPU时间)
clickhouse-client --query "SELECT query_id, query, elapsed, read_rows, formatReadableSize(read_bytes) as read_bytes, formatReadableSize(memory_usage) as memory, formatReadableSize(read_bytes/elapsed) as read_speed FROM system.processes WHERE query != '' ORDER BY elapsed DESC FORMAT Vertical"# 查看长时间运行的查询
clickhouse-client --query "SELECT query_id, user, query, elapsed, read_rows FROM system.processes WHERE elapsed > 10 ORDER BY elapsed DESC"

2. 查看查询历史(慢查询)

# 查看最近100条慢查询(超过1秒)
clickhouse-client --query "SELECT query_id, user, query, query_start_time, query_duration_ms, read_rows, read_bytes, memory_usage, formatReadableSize(memory_usage) as memory FROM system.query_log WHERE type=2 AND query_duration_ms > 1000 ORDER BY query_duration_ms DESC LIMIT 100 FORMAT Vertical"# 查看最近1小时的慢查询统计
clickhouse-client --query "SELECT toStartOfHour(event_time) as hour, count() as slow_queries, avg(query_duration_ms) as avg_duration_ms, max(query_duration_ms) as max_duration_ms FROM system.query_log WHERE type=2 AND event_time > now() - INTERVAL 1 HOUR AND query_duration_ms > 1000 GROUP BY hour ORDER BY hour DESC"

3. 查看系统资源使用

# 查看ClickHouse进程CPU使用率
top -p $(pgrep clickhouse-server) -n 1 | grep clickhouse# 查看ClickHouse线程数
clickhouse-client --query "SELECT count() FROM system.processes"# 查看系统负载
uptime# 查看CPU核心使用情况
mpstat -P ALL 1 5

4. 查看后台任务

# 查看正在进行的合并任务
clickhouse-client --query "SELECT database, table, elapsed, progress, merge_type, merge_algorithm, num_parts_to_merge, total_rows_to_merge, total_bytes_to_merge, formatReadableSize(total_bytes_to_merge) as total_size FROM system.merges ORDER BY elapsed DESC"# 查看正在进行的Mutation任务
clickhouse-client --query "SELECT database, table, mutation_id, command, create_time, is_done, latest_failed_part, latest_fail_time, latest_fail_reason FROM system.mutations WHERE is_done=0 ORDER BY create_time DESC"# 查看后台任务统计
clickhouse-client --query "SELECT count() as active_merges FROM system.merges"
clickhouse-client --query "SELECT count() as active_mutations FROM system.mutations WHERE is_done=0"

5. 查看表和数据分区状态

# 查看所有表的分区信息
clickhouse-client --query "SELECT database, table, partition, name, rows, bytes_on_disk, formatReadableSize(bytes_on_disk) as size, modification_time FROM system.parts WHERE active=1 ORDER BY bytes_on_disk DESC LIMIT 50"# 查看表的数据压缩情况
clickhouse-client --query "SELECT database, table, format, count() as parts_count, sum(rows) as total_rows, sum(bytes_on_disk) as total_bytes, formatReadableSize(sum(bytes_on_disk)) as total_size, avg(compression_ratio) as avg_compression FROM system.parts WHERE active=1 GROUP BY database, table, format ORDER BY total_bytes DESC"# 查看分区大小分布(找出大分区)
clickhouse-client --query "SELECT database, table, partition, count() as parts, sum(rows) as rows, formatReadableSize(sum(bytes_on_disk)) as size FROM system.parts WHERE active=1 GROUP BY database, table, partition ORDER BY sum(bytes_on_disk) DESC LIMIT 20"

6. 查看系统配置

# 查看最大并发查询数
clickhouse-client --query "SELECT name, value FROM system.settings WHERE name LIKE '%max_concurrent%'"# 查看线程池配置
clickhouse-client --query "SELECT name, value FROM system.settings WHERE name LIKE '%thread%' OR name LIKE '%pool%'"# 查看查询限制配置
clickhouse-client --query "SELECT name, value FROM system.settings WHERE name LIKE '%max_%' AND (name LIKE '%query%' OR name LIKE '%memory%' OR name LIKE '%time%')"

⚙️ 关键参数速查表

查询并发控制

参数推荐值说明为什么
max_concurrent_queriesCPU核心数最大并发查询数避免过多查询竞争CPU
max_thread_pool_sizeCPU核心数*2线程池大小平衡并发和资源使用
max_insert_threads4-8插入线程数控制插入操作的并发
background_pool_size16后台任务线程数控制合并、Mutation等后台任务

查询限制

参数推荐值说明为什么
max_execution_time300查询最大执行时间(秒)防止长时间查询占用CPU
max_memory_usage10000000000单查询最大内存(字节)防止内存溢出导致CPU浪费
max_rows_to_read0(无限制)最大读取行数根据业务需求设置
max_bytes_to_read0(无限制)最大读取字节数根据业务需求设置

合并和压缩

参数推荐值说明为什么
max_bytes_to_merge_at_max_space_in_pool161061273600合并最大字节数(150GB)控制合并任务大小
max_replicated_merges_in_queue16副本合并队列大小控制副本合并并发
compression_codecLZ4压缩算法LZ4速度快,CPU消耗低

🔍 CPU高使用率排查流程图

开始排查↓
1. 检查当前运行的查询(system.processes)↓有长时间运行的查询?↓ 是 → 分析查询,优化或kill↓ 否
2. 检查查询历史(system.query_log)↓有慢查询?↓ 是 → 优化慢查询SQL↓ 否
3. 检查后台任务(system.merges, system.mutations)↓有大量合并/Mutation任务?↓ 是 → 调整合并策略或等待完成↓ 否
4. 检查并发查询数(system.processes count)↓并发查询过多?↓ 是 → 调整max_concurrent_queries↓ 否
5. 检查系统资源(top, iostat)↓CPU/磁盘/内存问题?↓ 是 → 优化系统参数或扩容↓ 否
6. 检查表结构和索引↓索引不当或表结构问题?↓ 是 → 优化表结构和索引↓ 否
问题解决!

📊 性能指标正常范围

指标正常范围警告范围危险范围
CPU使用率<70%70-90%>90%
并发查询数<CPU核心数CPU核心数-2倍>2倍CPU核心数
查询平均执行时间<1s1-5s>5s
慢查询数量(>1s)<10/小时10-50/小时>50/小时
活跃合并任务数<55-15>15
活跃Mutation任务数01-3>3
线程数<CPU核心数*2CPU核心数*2-4倍>4倍CPU核心数

🛠️ 常见问题快速修复

问题1:查询并发过多导致CPU高

# 1. 查看当前并发查询
clickhouse-client --query "SELECT count() as concurrent_queries FROM system.processes WHERE query != ''"# 2. 查看正在运行的查询
clickhouse-client --query "SELECT query_id, user, query, elapsed FROM system.processes WHERE query != '' ORDER BY elapsed DESC"# 3. 临时降低并发限制(在config.xml中修改)
# <max_concurrent_queries>8</max_concurrent_queries># 4. 或者kill长时间运行的查询
clickhouse-client --query "KILL QUERY WHERE query_id='xxx'"

问题2:慢查询导致CPU高

# 1. 找出慢查询
clickhouse-client --query "SELECT query_id, query, query_duration_ms, read_rows FROM system.query_log WHERE type=2 AND query_duration_ms > 5000 ORDER BY query_duration_ms DESC LIMIT 10"# 2. 分析慢查询(查看执行计划)
clickhouse-client --query "EXPLAIN SELECT ..."  # 替换为实际慢查询# 3. 优化查询(添加索引、优化WHERE条件、减少读取数据量)# 4. 设置查询超时
clickhouse-client --query "SET max_execution_time=60"  # 60秒超时

问题3:后台合并任务导致CPU高

# 1. 查看合并任务
clickhouse-client --query "SELECT database, table, elapsed, progress, total_rows_to_merge FROM system.merges ORDER BY elapsed DESC"# 2. 调整合并策略(在config.xml中)
# <max_bytes_to_merge_at_max_space_in_pool>161061273600</max_bytes_to_merge_at_max_space_in_pool>
# <background_pool_size>16</background_pool_size># 3. 等待合并完成或手动触发合并
clickhouse-client --query "OPTIMIZE TABLE database.table FINAL"

问题4:Mutation任务导致CPU高

# 1. 查看Mutation任务
clickhouse-client --query "SELECT database, table, mutation_id, command, create_time, is_done FROM system.mutations WHERE is_done=0"# 2. 如果Mutation卡住,可以取消(谨慎操作)
# clickhouse-client --query "KILL MUTATION WHERE database='xxx' AND table='xxx' AND mutation_id='xxx'"# 3. 避免在高峰期执行大量Mutation

问题5:压缩算法CPU密集

# 1. 查看当前使用的压缩算法
clickhouse-client --query "SELECT format, count() as parts, sum(bytes_on_disk) as total_bytes FROM system.parts WHERE active=1 GROUP BY format"# 2. 如果使用ZSTD等高CPU压缩,考虑改为LZ4
# ALTER TABLE table_name MODIFY COLUMN column_name String CODEC(LZ4)# 3. 或者调整压缩级别
# ALTER TABLE table_name MODIFY COLUMN column_name String CODEC(ZSTD(1))  # 降低压缩级别

问题6:数据导入导致CPU高

# 1. 查看导入任务
clickhouse-client --query "SELECT query_id, query, elapsed FROM system.processes WHERE query LIKE '%INSERT%'"# 2. 降低插入并发
# SET max_insert_threads=4# 3. 批量插入而不是单条插入
# INSERT INTO table VALUES (...), (...), (...)  # 批量插入

💡 优化原则总结

  1. 先诊断,后优化:先确定CPU高的原因,再针对性优化
  2. 控制并发:合理设置并发查询数,避免CPU过载
  3. 优化查询:优化慢查询,减少CPU消耗
  4. 调整后台任务:合理配置合并和Mutation任务
  5. 选择合适压缩:根据场景选择压缩算法(LZ4 vs ZSTD)
  6. 监控持续:持续监控CPU使用情况,及时发现问题

📚 相关文档

  • 详细排查指南:ClickHouse_CPU排查详细指南.md
  • 故障检测指南:ClickHouse故障表象、影响与检测指南.md
  • 修复指南:ClickHouse调优修复指南.md

记住:CPU高使用率通常是查询问题,先查查询,再查配置! 🚀

http://www.dtcms.com/a/606035.html

相关文章:

  • ClickHouse CPU 排查详细指南
  • 苍穹外卖 —— Spring Task和WebSocket的运用以及订单统一处理、订单的提醒和催单功能的实现
  • 专门做搞笑视频的网站泉州哪个公司网站做的好
  • 用DeepSeek 编写的BFS python求解程序测试出来的几个难解数独
  • 台州汇客网站建设wordpress 网址导航页面
  • leetcode 3228. 将 1 移动到末尾的最大操作次数 中等
  • 做设计那些网站可以卖设计图包装袋设计网站推荐
  • 做网站语言中国十大门户类网站
  • 广东省省考备考(第一百四十九天11.13)——言语、判断推理(强化训练)
  • 网站专题教程网站编辑做多久可以升职
  • ChatGPT无预告升级:GPT-5.1 来了,自适应推理、语气更自然、可语气设定
  • 网络文件系统(NFS)完全指南:从入门到实战
  • 婚恋APP小程序开发:Uniapp+SpringBoot全栈开发指南
  • Python进度条工具tqdm的安装与使用
  • 个人博客网站模板ui网页设计实习周报
  • 【计算机网络】[特殊字符] 408高频考点 | 数据链路层组帧:从字符计数到违规编码,一文学透四大实现方法
  • 第一次搭建个人主页+GitHub部署全记录:HTML/CSS/JS前端实现+留言板踩坑
  • 中山中小企业网站建设做电商运营需要具备什么能力
  • 音视频课程上传、加密与播放技术详解:知识付费系统源码开发实践
  • 专业做网站的域名官网
  • 网站响应式图片切换代码网站升级建设中
  • 理解 CSS 层叠上下文与 z-index — 从一个真实案例出发
  • 盘一盘Redis的底层数据结构
  • C++_chapter15_C++重要知识点_lambda,initializer_list
  • Collections工具类
  • 国家建设执业注册中心网站字体怎么安装到电脑wordpress
  • Android16 EDLA 开机向导的锁屏设置页面,HDMI out 鼠标不显示问题分析解决
  • 基于yolov8的SAR影像目标检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
  • 网站做直播功能需要注册吗腾讯广告投放平台官网
  • 网站空间 阿里云北京金山办公软件股份有限公司官网