关于 altinity-expert-clickhouse-ingestion
altinity-expert-clickhouse-ingestion 是用于排查 ClickHouse 写入性能与故障的技能,面向数据库运维和数据工程人员。它通过一组 SQL 检查分析写入、分区部件、合并、物化视图及 Kafka 摄取情况,并规定结果解读与报告格式。
主要功能
- 01运行 14 项写入检查
- 02分析写入速度与失败情况
- 03检查部件创建和合并情况
- 04评估物化视图对写入的影响
- 05按检查结果生成诊断报告
适用场景
- 01排查写入缓慢或失败的原因
- 02识别微批处理和部件积压
- 03定位物化视图导致的写入开销
- 04检查 Kafka 摄取与缓冲表刷新
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ altinity/ altinity-skills --skill altinity-expert-clickhouse-ingestion安装后在 Claude Code 中输入/altinity-expert-clickhouse-ingestion确认已加载。
附带文件checks.sql
详细介绍
INSERT 与摄取性能
通过 system.query_log、system.part_log、system.query_views_log、system.kafka_consumers、system.processes 和 system.text_log,回答“为什么插入速度慢、失败或创建了过多分区”。
如果尚未确定连接模式、集群和时间范围,请先运行 altinity-expert-clickhouse-connection。
查询包
checks.sql— 14 项检查:Kafka 消费者健康状况和调度容量、正在运行和近期的插入活动、每个表的分区创建速率、插入与合并的平衡、慢速插入、物化视图对插入的开销、失败的插入、批次大小分布、Kafka 引擎摄取、日志中的 Kafka 消息、Buffer 表刷新模式,以及当前与插入相关的设置。其中 2 项需要system.part_log,1 项需要system.query_views_log,1 项需要system.text_log。
如何运行查询包
- 从此技能的目录读取每个包文件(技能加载器会打印目录路径)。
- 一次运行一条语句,绝不要运行整个文件。语句以
;结尾,并以-- @check <id> <title>标头开头;将 id 与结果一并保留。 - 遵循
-- @requires:当指定的表缺失、需要keeper但服务器没有 Keeper/ZooKeeper,或不满足版本条件时,跳过该语句。列出跳过的 id 及原因。 - 如果存在集群宏,按原样保留
{cluster};否则应用连接技能中的改写规则。其他任何{placeholder}都是模板变量:先替换为实际值,否则跳过该语句。 - 出错时,记录检查 id 和错误的第一行,然后继续。仅当错误为
UNKNOWN_IDENTIFIER时,运行DESCRIBE TABLE system.<table>并移除缺失的列。 severity列是该行的判定结果。照录即可;不要重新评级。
深入分析语句
当已知慢速插入的 query_id 时,按物化视图拆解其耗时。将 {query_id} 替换为从检查 ingestion-07 或 ingestion-08 中获取的 id。
SELECT
view_name,
view_duration_ms,
read_rows,
written_rows,
status,
exception
FROM system.query_views_log
WHERE query_id = '{query_id}'
ORDER BY view_duration_ms DESC;
解读规则
- 每次插入的平均
written_rows低于 1000,表示批次过小:客户端为每一行承担分区创建成本。建议每条 INSERT 批量插入 10k-1M 行;若客户端无法批量插入,则启用async_insert。检查 ingestion-10 返回的是batch_status,而非severity;将 “Seriously under-batched” 视为 Major,将 “Could improve” 视为 Moderate。 - 同一时间窗口内
NewPart事件很多而MergeParts事件很少(ingestion-06),意味着合并跟不上摄取速度,并非插入太慢。插入侧运行正常;问题在合并侧。 - 当
system.query_views_log显示视图耗时占插入耗时的主要部分(ingestion-08)时,应修复物化视图查询,而非插入。指出最慢的视图及其占插入耗时的比例。 - Buffer 表会增加自身的刷新延迟:只有刷新后才能看到行;较大的 Buffer 会占用更多内存,并在重启时带来数据丢失窗口。ingestion-13 中的刷新模式可以解释仅靠 query_log 无法显示的插入到可见延迟。
- 当
part_log被禁用时,跳过标记为@requires table:system.part_log的检查。请明确说明这一点,不要据此断定分区创建正常;没有 part_log,就无法确定分区创建速率以及插入与合并的平衡情况。 - 失败的插入(ingestion-09)若出现 TOO_MANY_PARTS 或文本 “Too many parts”,是合并积压的症状,而非插入错误。插入时出现 MEMORY_LIMIT_EXCEEDED,通常是由物化视图或单个批次过大导致。
- 这里仅汇总 Kafka 检查(ingestion-01、-02、-11、-12)。若轮询或提交时间持续增长,或异常数组非空,就应转到 Kafka 技能,而不是在本技能中继续深入排查。
报告格式
- 标题:连接模式、集群或“单节点”、ClickHouse 版本、时间范围。
- 发现:包含
check、severity、object、evidence、recommendation列的表格;每项发现占一行,按严重程度从高到低排列。证据引用结果行中的数字。 - 正常检查:用一行列出未返回问题行的检查 ID。
- 跳过和失败的检查:列出 ID 和原因或第一条错误信息。此部分不得省略。
- 后续步骤:接下来要加载的技能和立即采取的措施。
后续技能
- Kafka 消费者延迟、消费者异常、重新均衡或消费者数量超过池大小 → 加载技能
altinity-expert-clickhouse-kafka - 分区创建速度超过合并速度、TOO_MANY_PARTS、每个分区包含许多分区片段 → 加载技能
altinity-expert-clickhouse-merges - 物化视图查询本身很慢或读取数据过多 → 加载技能
altinity-expert-clickhouse-reporting - 插入失败并出现 MEMORY_LIMIT_EXCEEDED 或峰值内存过高 → 加载技能
altinity-expert-clickhouse-memory - 分区键过于细化、宽表或物化视图设计问题 → 加载技能
altinity-expert-clickhouse-schema - 插入延迟与磁盘或写入吞吐量相关 → 加载技能
altinity-expert-clickhouse-storage - 插入操作被复制表阻塞或等待
insert_quorum→ 加载技能altinity-expert-clickhouse-replication
评论
支持 Markdown