土法炼钢兴趣小组的算法知识备份

【列存引擎内核】经典故障模式

文章导航

分类入口
databasearchitecture
标签入口
#clickhouse#failure-modes#too-many-parts#merge-lag#mutation#replication#oom

目录

列存生产事故很少是「神秘 bug」,多是 Part 生命周期 + 分布式队列 + 内存预算 的组合失控。本文按症状组织 Too many parts、Merge 跟不上、Mutation 堆积、副本延迟、OOM 五条链路,每条给:触发条件 → 系统表信号 → 缓解 → 预防。配置细节交叉 第 16 篇;监控 SQL 交叉 第 14 篇

版本锚定:ClickHouse 24.x LTS。复现步骤 须在测试集群执行——本文不粘贴未跑过的错误文本。


一、Too many parts

1.1 机制

每次 insert 通常生成新 Part(或少量 part)。后台 merge 合并为小 number 大 part。若 insert 速度 > merge 速度,active parts 数上升。超过阈值:

根因链:

flowchart LR
  I[小 batch 高频 INSERT]
  P[parts 激增]
  M[merge 来不及]
  T[throw/delay insert]
  I --> P --> M --> T

1.2 系统表信号

SELECT database, table, count() AS parts
FROM system.parts WHERE active
GROUP BY database, table
ORDER BY parts DESC;

单表 parts 数百~上千(阈值依赖配置)即危险。

1.3 常见触发源

说明
应用每行 INSERT 最差实践
过多 Kafka consumer 第 10 篇 MV
Distributed 多 shard 小写 每 shard 各涨 parts
定时 cron 每分钟 insert 无 batch
物化视图放大写 多 MV

1.4 缓解

  1. 立刻:增大 batch、async_insert、停非关键写入;
  2. 短期SYSTEM START MERGES / 确保未 STOP MERGES;
  3. 中期OPTIMIZE TABLE ... FINAL(重操作,低峰执行);
  4. 长期:Buffer 表、调整 merge_tree settings、硬件 IO。

1.5 预防


二、Merge 跟不上 insert

2.1 与 §一 区别

Too many parts 是 结果;merge 跟不上是 原因 之一。其它原因:磁盘 IO 饱和、merge 线程池满、单 part 过大无法合并、max_bytes_to_merge_at_max_space_in_pool 限制。

2.2 信号

SELECT * FROM system.merges;
SELECT metric, value FROM system.metrics WHERE metric LIKE '%Merge%';

长期有 merge 且 elapsed 很大;或 无 merge 但 parts 涨(可能被 STOP 或 pool 满)。

2.3 磁盘与 merge 池

Merge 读多 part 写新 part —— 磁盘带宽 是瓶颈常见项。HDD 上 merge 与查询争用明显;SSD/NVMe 改善但仍需监控 OSIOWaitMicrosecondssystem.events)。

Settings(详见第 16 篇):

2.4 Wide part 过大

merge 选 part 受大小与 level 影响——level 不一致时 merge selector 可能慢。观察 part level 分布:

SELECT table, level, count() FROM system.parts WHERE active GROUP BY table, level ORDER BY table, level;

三、Mutation 堆积

3.1 机制

ALTER UPDATE/DELETE 实现为 mutation——重写 part,与 merge 共享线程池(第 06 篇)。

3.2 症状

SELECT database, table, command, parts_to_do, is_done, latest_failed_part, latest_fail_reason
FROM system.mutations
WHERE NOT is_done;

3.3 缓解

3.4 预防


四、副本延迟与 lost replica

4.1 机制

ReplicatedMergeTree 依赖 Keeper/ZK log(第 08 篇)。网络分区、Keeper 故障、磁盘满导致 replica 跟不上。

4.2 症状

现象 检查
读 stale absolute_delay
只读 replica is_readonly, readonly 原因
插入失败 readonly 副本
队列爆炸 replication_queue
SELECT database, table, replica_name, is_readonly, absolute_delay, queue_size, last_queue_update_exception
FROM system.replicas;

4.3 Lost replica

极端:ZooKeeper 元数据与磁盘 part 不一致。官方路径:SYSTEM RESTORE REPLICA、或 detach + 重新 attach、或从其它 replica 复制。 生产须按 runbook 与 Altinity/官方文档操作——误操作可删元数据。

4.4 缓解


五、OOM 与内存限制

5.1 单查询 OOM

超过 max_memory_usage

Memory limit (for query) exceeded

(message 以版本为准。)

大 GROUP BY、GLOBAL IN、大 JOIN、COUNT(DISTINCT) 高 cardinal。

SELECT query, formatReadableSize(memory_usage), query
FROM system.processes
ORDER BY memory_usage DESC;

缓解:调低并发、增 max_bytes_before_external_group_by、 spill 类 settings、改写 SQL(预聚合表、MV 第 10 篇)。

5.2 服务器 OOM

max_server_memory_usage 或 OS killer 杀进程——全集群不可用

merge/mutation 与查询共享内存——监控 system.merges.memory_usage

5.3 DuckDB 对照

嵌入式 memory_limit + spill(第 12 篇)——无 server 级 merge OOM,但单查询仍可能失败。


六、Distributed 相关故障

故障 信号
单 shard 插入失败 insert_distributed_sync 暴露
GLOBAL JOIN OOM 协调节点 processes
结果重复/缺失 维表未同步、IN vs GLOBAL IN
DDL 半成功 distributed_ddl_queue

第 09 篇


七、Kafka + MV 管道故障


八、故障决策树

INSERT 失败
├─ Too many parts? → §一
├─ Readonly replica? → §四
└─ Memory limit? → §五

查询极慢
├─ read_rows 极大? → 索引/剪枝(第 07 篇)
├─ 全 cluster scan? → 分片键/GLOBAL(第 09 篇)
└─ merge 占 IO? → §二

数据不对
├─ mutation 未完成? → §三
├─ Replacing 未 merge? → FINAL/argMax
└─ 副本 lag? → §四

九、测试环境复现框架(须本地执行)

9.1 Too many parts

-- 测试库 ONLY
CREATE TABLE tiny_parts (id UInt64) ENGINE = MergeTree ORDER BY id;
-- 循环小 insert(脚本 1000 次 1 行)直至触发 throw

勿在生产运行。

9.2 观察 merge

SYSTEM STOP MERGES ON TABLE tiny_parts;
-- insert ...
SYSTEM START MERGES ON TABLE tiny_parts;
SELECT * FROM system.merges WHERE table = 'tiny_parts';

9.3 副本 lag

测试双节点断网——iptables 阻断 9000/2181——观察 absolute_delay


十、事故复盘模板

  1. 时间线:首次告警、峰值 parts、业务影响;
  2. 根因:insert 模式 / 配置 / 硬件 / 变更;
  3. 数据query_log、parts 曲线、merge 队列截图;
  4. 修复:临时 + 永久;
  5. 行动项:监控阈值、batch 规范、runbook。

十一、小结

模式 一句话
Too many parts 小 insert 打败 merge
Merge lag IO/池/大 part
Mutation 堆 ALTER 当 OLTP
Replica lag Keeper/网络/磁盘
OOM 大聚合/GLOBAL/merge 内存

附录 A、只读副本切换 Runbook

  1. 确认 is_readonlylast_exception;2. 检查 Keeper/ZK 与磁盘;3. SYSTEM RESTART REPLICA(语法查文档);4. 无效则 DETACH/ATTACHRESTORE REPLICA;5. 仍失败从 healthy replica 复制 part。 未备份删 ZK 路径。

附录 B、detach part

DETACH PART 将 part 移入 detached——查询不可见但占盘。原因:broken part、复制冲突。处理:查 system.detached_parts,确认后 ATTACH PART 或删除目录(危险)。

附录 C、Keeper session 超时

网络抖动 → session 过期 → replica readonly → 写入失败。Fix 网络/ Keeper 资源;调 session_timeout_ms 不能替代 Fix 网络。

附录 D、磁盘满级联

磁盘满 → merge 失败 → parts 涨 → insert 拒 → 副本 lag。监控 system.disks free_space;TTL 与 cold tier;紧急 DROP PARTITION 弃数据(须授权)。

附录 E、升级期间

滚动升级时 brief merge stop/restart——计划低峰;升级后查 system.merges 与 parts 基线对比。

附录 F、应急 insert 降级

触发 parts_to_delay_insert 时:客户端指数退避;临时增大 batch;路由到 Buffer(风险自负);停 secondary MV;极限 SYSTEM STOP MERGES 换时间且随后 START。

附录 G、mutation kill

-- 语法以 24.x 为准
KILL MUTATION WHERE database = 'db' AND table = 't' AND mutation_id = '...';

附录 H、GLOBAL OOM 事故

协调节点 GLOBAL IN 维表过大——system.processes 见内存;改写复制维表;限 max_memory_usage 防拖死全节点。

附录 I、Lost replica 与 SYSTEM RESTORE REPLICA

官方文档 Recovery 节步骤——生产必须双人 review。对比 第 08 篇副本

附录 J、DuckDB 嵌入式故障

memory_limit 失败、文件锁、checkpoint 失败——无 replica lag 类问题;宿主应用需 catch 异常并重试。

附录 K、Symptom → SQL 速查

客户端错误关键词 首查 SQL
Too many parts system.parts count
Memory limit system.processes
Readonly system.replicas
Unknown replica system.replicas + Keeper
Timeout system.merges + query_log

附录 L、Freeze / unfreeze

FREEZE PARTITION 备份 part 快照——与 backup 命令并存。误 freeze 占双倍磁盘。

附录 M、Broken part

system.partsis_broken 或 attach 失败——从 replica 拉 part 或 restore backup。

附录 N、Zookeeper vs Keeper 运维

Keeper 四字命令 ruok/mntr——quorum 健康。CH system.zookeeper 表(若启用)查 session。

附录 O、Insert quorum

insert_quorum 设置写入最少 replica ack——延迟换 durability。与 async insert 交互查文档。

附录 P、Post-incident 数据修复

ReplacingMergeTree 重复行:OPTIMIZE FINAL 或查询 argMax。Collapsing 不成对:源数据修复重灌。

附录 Q、Chaos 实验清单(测试)

kill merge thread、fill disk 90%、partition 网络 30s——每实验记录 recovery time 本地填

附录 · 深度补充(系列交叉索引)

深度 1

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 2

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 3

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 4

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 5

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 6

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 7

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 8

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 9

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 10

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 11

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 12

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 13

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 14

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 15

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 16

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 17

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 18

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 19

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 20

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 21

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 22

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 23

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 24

第 15 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。


附录 · 工程深化索引

深化 1:Too many parts 根因

检查项 说明 关联篇章
机制 Too many parts 根因 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 2:parts_to_throw_insert

检查项 说明 关联篇章
机制 parts_to_throw_insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 3:小 batch 高频 insert

检查项 说明 关联篇章
机制 小 batch 高频 insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 4:Merge 跟不上 insert

检查项 说明 关联篇章
机制 Merge 跟不上 insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 5:merge_max_block_size

检查项 说明 关联篇章
机制 merge_max_block_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 6:mutation 阻塞读

检查项 说明 关联篇章
机制 mutation 阻塞读 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 7:ALTER UPDATE 危害

检查项 说明 关联篇章
机制 ALTER UPDATE 危害 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 8:副本延迟 lost

检查项 说明 关联篇章
机制 副本延迟 lost 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 9:ZooKeeper 压力

检查项 说明 关联篇章
机制 ZooKeeper 压力 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 10:OOM max_memory_usage

检查项 说明 关联篇章
机制 OOM max_memory_usage 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 11:GROUP BY 大键

检查项 说明 关联篇章
机制 GROUP BY 大键 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 12:JOIN 内存爆炸

检查项 说明 关联篇章
机制 JOIN 内存爆炸 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 13:分布式 GLOBAL IN

检查项 说明 关联篇章
机制 分布式 GLOBAL IN 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 14:网络分区副本

检查项 说明 关联篇章
机制 网络分区副本 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 15:磁盘满 merge 停

检查项 说明 关联篇章
机制 磁盘满 merge 停 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 16:TTL 与 merge 竞争

检查项 说明 关联篇章
机制 TTL 与 merge 竞争 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 17:Projection 构建失败

检查项 说明 关联篇章
机制 Projection 构建失败 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 18:Kafka consumer 停

检查项 说明 关联篇章
机制 Kafka consumer 停 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 19:MV 目标引擎错误

检查项 说明 关联篇章
机制 MV 目标引擎错误 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 20:ReplicatedMergeTree 冲突

检查项 说明 关联篇章
机制 ReplicatedMergeTree 冲突 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 21:恢复:DETACH ATTACH

检查项 说明 关联篇章
机制 恢复:DETACH ATTACH 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 22:恢复:SYSTEM STOP MERGES

检查项 说明 关联篇章
机制 恢复:SYSTEM STOP MERGES 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 23:恢复:降 ingest

检查项 说明 关联篇章
机制 恢复:降 ingest 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 24:恢复:扩容 merge 线程

检查项 说明 关联篇章
机制 恢复:扩容 merge 线程 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 25:事故复盘模板

检查项 说明 关联篇章
机制 事故复盘模板 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 26:Too many parts 根因

检查项 说明 关联篇章
机制 Too many parts 根因 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 27:parts_to_throw_insert

检查项 说明 关联篇章
机制 parts_to_throw_insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 28:小 batch 高频 insert

检查项 说明 关联篇章
机制 小 batch 高频 insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 29:Merge 跟不上 insert

检查项 说明 关联篇章
机制 Merge 跟不上 insert 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 30:merge_max_block_size

检查项 说明 关联篇章
机制 merge_max_block_size 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 31:mutation 阻塞读

检查项 说明 关联篇章
机制 mutation 阻塞读 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 32:ALTER UPDATE 危害

检查项 说明 关联篇章
机制 ALTER UPDATE 危害 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 33:副本延迟 lost

检查项 说明 关联篇章
机制 副本延迟 lost 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 34:ZooKeeper 压力

检查项 说明 关联篇章
机制 ZooKeeper 压力 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 35:OOM max_memory_usage

检查项 说明 关联篇章
机制 OOM max_memory_usage 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

上一篇监控

下一篇配置与容量

参考资料

  1. ClickHouse Documentation, MergeTree, Replication, Constraints on merge, 24.x
  2. ClickHouse Knowledge Base — Too many parts(B 级)
  3. 本系列 第 061416

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-06-18 · database / architecture

【列存引擎内核】物化视图与增量管道

ClickHouse Materialized View 的触发语义、块级增量与目标表引擎选择;Kafka Engine + MV 典型架构;与 PostgreSQL 触发器/MV 的对照及常见坑。

2026-06-18 · database / architecture

【列存引擎内核】配置陷阱与容量规划

parts_to_throw_insert、merge 线程池、max_bytes_to_merge、merge_max_block_size、磁盘 SSD/HDD 策略与内存预算;MergeTree settings 与服务器级 config 的容量规划方法。


By .