列存生产事故很少是「神秘 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 数上升。超过阈值:
parts_to_delay_insert— 插入变慢;parts_to_throw_insert— 插入拒绝,客户端见Too many parts类异常(具体 message 以版本为准)。
根因链:
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 缓解
- 立刻:增大
batch、
async_insert、停非关键写入; - 短期:
SYSTEM START MERGES/ 确保未 STOP MERGES; - 中期:
OPTIMIZE TABLE ... FINAL(重操作,低峰执行); - 长期:Buffer 表、调整
merge_treesettings、硬件 IO。
1.5 预防
- insert 批量 ≥ 万级行(视列宽);
- 监控 parts 趋势告警;
- 分区设计避免单分区 parts 爆炸。
二、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
改善但仍需监控
OSIOWaitMicroseconds(system.events)。
Settings(详见第 16 篇):
background_pool_sizebackground_merges_mutations_concurrencymax_bytes_to_merge_at_max_space_in_pool
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 症状
- 查询仍见旧数据直到 mutation 完成;
system.mutations中parts_to_do不降;- merge 被 mutation 饿死 → 间接 too many parts。
SELECT database, table, command, parts_to_do, is_done, latest_failed_part, latest_fail_reason
FROM system.mutations
WHERE NOT is_done;3.3 缓解
- 取消错误
mutation:
KILL MUTATION WHERE ...(语法查 24.x); - 大表避免频繁 UPDATE——改用 ReplacingMergeTree + 重 insert;
- 低峰执行,增并发 settings(权衡内存)。
3.4 预防
- 分析场景用 insert-only + dedup 引擎;
- 不把 CH 当 OLTP 行级更新库。
四、副本延迟与 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 缓解
- 修复 Keeper quorum;
- 扩容磁盘;
- 临时
SYSTEM STOP FETCHES/ 限流写入让副本追上; - 网络修复后观察
queue_size下降。
五、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 管道故障
- Consumer lag 涨:MV 太慢或 merge 堵;
- 重复数据:at-least-once + 无 Replacing;
- Schema 错误:insert 失败停 consumer。
八、故障决策树
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。
十、事故复盘模板
- 时间线:首次告警、峰值 parts、业务影响;
- 根因:insert 模式 / 配置 / 硬件 / 变更;
- 数据:
query_log、parts 曲线、merge 队列截图; - 修复:临时 + 永久;
- 行动项:监控阈值、batch 规范、runbook。
十一、小结
| 模式 | 一句话 |
|---|---|
| Too many parts | 小 insert 打败 merge |
| Merge lag | IO/池/大 part |
| Mutation 堆 | ALTER 当 OLTP |
| Replica lag | Keeper/网络/磁盘 |
| OOM | 大聚合/GLOBAL/merge 内存 |
附录 A、只读副本切换 Runbook
- 确认
is_readonly与last_exception;2. 检查 Keeper/ZK 与磁盘;3.SYSTEM RESTART REPLICA(语法查文档);4. 无效则DETACH/ATTACH或RESTORE 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.parts 中 is_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[配置调优]
上一篇:监控
下一篇:配置与容量
参考资料
- ClickHouse Documentation, MergeTree, Replication, Constraints on merge, 24.x
- ClickHouse Knowledge Base — Too many parts(B 级)
- 本系列 第 06、14、16 篇
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【列存引擎内核】物化视图与增量管道
ClickHouse Materialized View 的触发语义、块级增量与目标表引擎选择;Kafka Engine + MV 典型架构;与 PostgreSQL 触发器/MV 的对照及常见坑。
【列存引擎内核】ClickHouse 与 DuckDB 选型决策
从部署形态、规模、并发、联邦与运维成本五维对比 ClickHouse 与 DuckDB;给出决策树与组合架构,不排名不测虚构 benchmark。
【列存引擎内核】配置陷阱与容量规划
parts_to_throw_insert、merge 线程池、max_bytes_to_merge、merge_max_block_size、磁盘 SSD/HDD 策略与内存预算;MergeTree settings 与服务器级 config 的容量规划方法。
【列存引擎内核】DuckDB 架构与嵌入式 OLAP
DuckDB 进程内嵌入式模型、Storage 的 Row Group 与 Column Segment、Catalog 与 checkpoint;与 ClickHouse Server 部署差异及 pg_duckdb 联邦场景边界。