尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
列式查询日常巡检应先看什么
列式查询日常巡检应先看什么ClickHouse 的运行状态除了 CPU 和磁盘空间还受 MergeTree 后台任务、副本队列以及 Keeper 协调状态影响。系统表里出现积压不一定代表故障但持续积压、与写入模式或查询延迟同时变化时值得进一步检查。本文给出日常巡检的观察面和处置顺序。告警阈值应按分区数量、写入批次、版本和容量基线设定。1. Mergetree 引擎与分布式协调巡检拓扑ClickHouse 的健康状况由前台查询、后台 Merge / Mutation 任务以及 ZooKeeper 协调三大板块交织决定。2. 避免弯路5 大关键巡检维度与硬指标在设计巡检脚本时必须将以下 5 个系统表指标锁定为每日核心关注项2.1 Active Parts 数量与写入频繁度MergeTree 依靠后台将小的 Part 块合并为大 Part。如果写入客户端每秒发送数百个微小 Block如没有在 Buffer 表中攒批将导致Too many parts in all data parts in table异常强行拒绝写操作。巡检标准单个 Table 单个 Partition 内的 Active Parts 数量不得超过 300 个。2.2 Unfinished Mutations 挂起队列ALTER TABLE ... UPDATE/DELETE属于重型 Mutation 操作。如果有未完成的 Mutation 被阻塞例如因为内存不足无法重写 Data Part后台的正常 Merge 任务也会被间接阻塞。巡检标准system.mutations中is_done 0的任务持续时间不能超过 2 小时。2.3 System Replication Queue 日志积压对于 ReplicatedMergeTree副本间的数据同步依赖replication_queue。一旦队列中存在postponed或重试次数极高的任务说明副本间数据已发生严重漂移。3. ClickHouse 深度巡检自动化脚本以下 Python 脚本直连 ClickHouse HTTP 接口对 Merges、Mutations、Parts 状态及 Replication Queue 进行综合扫描输出风险报告并自动识别“亚健康”数据表。#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import requests import logging from typing import Dict, List, Any logging.basicConfig(levellogging.INFO, format[%(asctime)s] [%(levelname)s] %(message)s) class ClickHouseHealthInspector: def __init__(self, host: str 127.0.0.1, port: int 8123, user: str default): self.url fhttp://{host}:{port}/ credential os.environ.get(CLICKHOUSE_CREDENTIAL) self.auth (user, credential) if credential else None self.warnings: List[str] [] self.errors: List[str] [] def _query(self, sql: str) - List[Dict[str, Any]]: 执行 SQL 并返回 JSON 结果 params {query: f{sql} FORMAT JSON} try: resp requests.post(self.url, paramsparams, authself.auth, timeout10) resp.raise_for_status() return resp.json().get(data, []) except Exception as e: logging.error(巡检查询 SQL 失败 [%s]: %s, sql, str(e)) self.errors.append(fSQL 查询异常: {sql}) return [] def check_too_many_parts(self): 巡检是否接近 Parts 数量上限 sql SELECT database, table, partition, count() as parts_cnt FROM system.parts WHERE active 1 GROUP BY database, table, partition HAVING parts_cnt 150 ORDER BY parts_cnt DESC rows self._query(sql) for r in rows: msg f表 [{r[database]}.{r[table]}] 分区 [{r[partition]}] 活动 Parts 数量较高: {r[parts_cnt]} (上限警告阈值: 300) if int(r[parts_cnt]) 300: self.errors.append(msg) else: self.warnings.append(msg) def check_stuck_mutations(self): 巡检长期未完成的 Mutation sql SELECT database, table, mutation_id, command, create_time FROM system.mutations WHERE is_done 0 AND create_time now() - INTERVAL 1 HOUR rows self._query(sql) for r in rows: msg f表 [{r[database]}.{r[table]}] 存在挂起超过 1 小时的 Mutation: ID{r[mutation_id]}, Cmd{r[command]} self.errors.append(msg) def check_replication_queue(self): 巡检副本复制队列延迟与异常 sql SELECT database, table, count() as queue_size, sum(num_tries) as total_tries FROM system.replication_queue GROUP BY database, table HAVING queue_size 50 OR total_tries 20 rows self._query(sql) for r in rows: msg f副本队列阻滞: 表 [{r[database]}.{r[table]}] 积压任务数: {r[queue_size]}, 总重试次数: {r[total_tries]} self.errors.append(msg) def run_full_inspection(self): logging.info( 开始 ClickHouse 内核与生态集群日常深度巡检 ) self.check_too_many_parts() self.check_stuck_mutations() self.check_replication_queue() logging.info(巡检扫描完成。警告数: %d, 错误数: %d, len(self.warnings), len(self.errors)) for w in self.warnings: logging.warning([巡检警告] %s, w) for e in self.errors: logging.error([巡检错误] %s, e) if __name__ __main__: inspector ClickHouseHealthInspector(host127.0.0.1, port8123) inspector.run_full_inspection()4. 被动告警 vs 自动化深度巡检 Trade-offs在 ClickHouse 运维治理实践中仅依赖被动告警与建立主动探针巡检的效率对比如下评估维度被动响应式告警 (Simple Metrics)自动化深度探针巡检 (In-depth Inspection)故障发现节点业务写入报错Too many parts之后Parts 数量攀升至 150 预警阶段提前介入定位准确度低。告警只告知磁盘或 CPU 高高。直接精确定位到具体表、Partition 与挂起的 Mutation ID对集群影响故障已爆发可能面临重启或停止写流量提前做OPTIMIZE TABLE或杀掉僵尸 Mutation业务无感巡检研发成本极低。设置标准 OS 阈值告警即可中。需要深入理解 ClickHousesystem系统表设计运维效果只能发现已触发的告警可较早发现积压趋势效果需用告警命中率和复盘结果验证5. 日常巡检治理与自动化收口建议避免频繁手动 OPTIMIZE如果在巡检中发现 Parts 过多切忌盲目针对全表执行OPTIMIZE TABLE ... FINAL这会引发巨量的 CPU 与 Disk I/O 开销。应优先排查前端写流量是否缺乏 Buffer 攒批。Keeper 元数据监控针对 ClickHouse Keeper必须将system.zookeeper的响应延迟与节点数纳入巡检防止 Keeper 垃圾回收不及时导致 ZK 事务暴涨。巡检脚本自动化挂载将巡检探针以cron作业或 K8s CronJob 形式部署巡检结果转化为 JSON 挂载至企业统一运维平台实现日常隐患的早发现早干预。
RELATED

相关推荐

GLM-5.3 API 上线:同参数基座,编程能力靠后训练提升 50%

GLM-5.3 API 上线:同参数基座,编程能力靠后训练提升 50%

8 月 19 日,智谱宣布 GLM-5.3 的 API 正式开放调用。这个模型 8 月 14 日就发布了,这两天刚把 API 全面铺开,同时官方放话:模型权重将于下周五开源。如果你这两天的信息流里全是"开源第一""并列旗舰"这类词&a…

📅 2026/10/16 10:25:27
PDF批量修改有多简单?免费开源的PDF补丁丁5分钟速成指南

PDF批量修改有多简单?免费开源的PDF补丁丁5分钟速成指南

PDF批量修改有多简单?免费开源的PDF补丁丁5分钟速成指南 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https://…

📅 2026/10/26 0:07:02
数据库解析器异常后应留下哪些记录

数据库解析器异常后应留下哪些记录

数据库解析器异常后应留下哪些记录 对 MySQL Lexer/Parser 做扩展时,内存访问、AST 重写和锁顺序都值得额外审查。出现崩溃或卡顿后,结论应由 core、符号表、SQL 样本和版本信息共同支持,不能只凭堆栈中的一个函数名判断原因。 本文以故障演练…

📅 2026/10/16 12:53:17
MORE NEWS

更多资讯

📰

启动报Port 8088 was already in use?先查是谁占的

启动报Port 8088 was already in use?先查是谁占的 项目启动报 Port 8088 was already in use,意思很直白:这个端口已经有人占了。 先说原理:端口是"门牌号",一间房只住一个进程 端口就是一台机器上的门牌号…

📰

担心文档上云?本地运行的办公AI才敢放心用

单位上周开了个会,主题是"AI 提效",散会时领导补了一句:涉及客户资料的文档,不许往云端传。这话一出,会议室里本来跃跃欲试的同事全蔫了——大家平时用的那些在线 AI,文档一上传就不知道存哪儿去…

📰

先能用,再好用:从烂尾复盘到两周上线,全栈项目的‘原型—快速迭代‘方法论

先能用,再好用:从烂尾复盘到两周上线,全栈项目的“原型—快速迭代”方法论 全栈学习路径的文章已经很多了:怎么选技术栈、怎么搭环境、怎么记文档,几乎每个方向都有人写。但一个更扎心的问题很少有人正面讨论——为什…

📰

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看‘会思考‘改写了哪些边界

深度思考模式把 ARC-AGI-2 从 17.6% 拉到 45.1%:对照 Gemini 3 Pro 的三份能力评测,看“会思考”改写了哪些边界 一、先说结论:变强的不是“知识”,而是“解法” 每次新模型发布,评测榜单都会涨几个点,大…

📰

1.c++入门篇

1.c中的关键字asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassext…

📰

《江灯合声》:有可行的分框版,也仍可以选择连续鸣谢

武汉江岸区栎坡合唱团在免费节目册《江灯合声》中,以表格集中鸣谢资助者。各家共同要求改为独立小框,团里仍想保留表格。现有全名与支持事项清楚可见,双方此前未承诺具体排版。我支持保留表格。补充的试排材料让选择更具体:分框能…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬