SuperAPI AI 工具集

doris-debug-compaction

数据与分析

查看项目

更新于 10-15 18:45

技能介绍

用途:用于解决 Apache Doris 中 -235 / too many versions 报错及 compaction(压缩)滞后问题。该错误在 RowsetBuilder::check_tablet_version_count 中由 version_count > max 触发(对应 be/src/storage/rowset_builder.cpp)。

主要能力:提供问题定位思路与命令。可用 ./scripts/doris-debug log-grep be/log --pack versions 在日志中确认;用 ./scripts/doris-debug be-metrics --be http://$BE:8040 --grep compaction 查看 compaction 吞吐;用 iostat -x 1 检查磁盘 IO。

常见成因:A 写入速率超过 compaction 吞吐(version_count 上升、compaction score 增长),可降低写入频率或增加 compaction 线程;B 磁盘 IO 瓶颈(iostat 磁盘利用率超 90%),可将 WAL 迁移到独立磁盘或增加 compaction 磁盘;C max_tablet_version_num 相对负载过低(正常写入即报 -235),可临时提高上限再修根因;D 单 tablet 热点(某 tablet 版本数为同类的 10 倍),属分区/分桶键倾斜。

相关配置(be.conf):max_tablet_version_num 默认 2000,为硬上限,仅作临时手段;time_series_max_tablet_version_num 默认 20000,针对时序表;max_cumulative_compaction_threads = -1(按 CPU 核数自动);compaction_task_num_per_disk = 4;compaction_tablet_size_threshold = 107374182400(100GB,超过则跳过 base compaction)。

限制:提高 max_tablet_version_num 只是临时阀门,仍需平衡写入与 compaction。默认值来源为 be/src/common/config.cpp,score 计算见 be/src/olap/cumulative_compaction_policy.cpp。其他细节资料暂未提供。