① 标题党#
主标题:Doris 小文件爆炸?Compaction 这个保洁阿姨你必须认识
备选:写了一天数据,Doris 卡了?它在偷偷"合文件"
② 开场钩子#
数据是流式导进来的,越导文件越多、越碎。不收拾,查询会越来越慢。Doris 有一个后台保洁机制在默默把碎文件合并成大块——它就是 Compaction。
③ 主角特性:Compaction 机制#
- LSM 式多版本:每次导入生成一个小版本(memtable → 磁盘)
- Compaction 把多个小版本合并成一个大版本,减少读取时的文件数、垃圾数据
- 触发方式:累积量/时间/大小基数触发
坑:写入速率远大于合并速率时,会出现”合并跟不上”,进入导入降级/拒绝 —— 这是生产里最常见的 Doris 事故之一。
④ 最小可复现#
SHOW TABLES FROM db; -- 看 tablet 版本计数
-- 手动触发一次 compaction
CANCEL ALTER TABLE ...; -- 误区
-- 正确:通过 BE 配置 / 等待后台合并sql(核心是看懂 version count 与 compaction backlog)
⑤ 结论#
Compaction 是 Doris 的隐形保洁阿姨。它不干活,查询就开始吃灰。看懂它,你才能避开”写太快把 Doris 写崩”的坑。
⑥ 配图脚本#
LSM 版本时间线 / 合并示意 / version 计数监控 / 写放大 vs 读放大