【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】新部署的oceanbase v4集群,没改过配置,为什么2点没有执行合并操作
合并(Merge)不会固定在某个时间强制触发,它只在 合并时间窗口内、且满足触发条件 时才会执行。所以“到点没合并”几乎都是以下原因。
1. 没有满足最关键触发条件(最常见)
OceanBase 合并要满足 frozen_scn 推进(即需要有新的转储点/冻结点)。
也就是说:
当天没有 转储/冻结 (freeze),就不会触发合并
如果数据量小、写入少,系统可能 长时间不 freeze,自然也不会合并
你可以查看:
SHOW PARAMETERS LIKE ‘freeze_trigger_%’;
以及查看最新的 freeze:
SELECT * FROM oceanbase.__all_freeze_info ORDER BY freeze_ts DESC;
2. 合并时间窗口没有覆盖你期待的“凌晨 2 点”时间
OceanBase 有参数控制合并可执行时间段:
merge_start_time
merge_end_time
如果你的窗口不是覆盖 02:00,那当然不会执行。
例如:
SHOW PARAMETERS LIKE ‘merge%time%’;
常见误区:
很多集群默认窗口是 03:00–06:00,不是 02:00。
3. 上一次合并尚未结束(合并状态未回到 idle)
如果上一次合并卡住、被打断或耗时长,会导致下一次合并不能开始。
检查合并状态:
SELECT * FROM oceanbase.__all_zone WHERE name=‘merge_status’;
如果状态不是 IDLE(如 SUSPENDED、ERROR、LS_WAITING 等),合并不会继续。
4. 合并被暂停了(某些运维操作会造成 suspend)
查看是否被人工或系统暂停:
SHOW PARAMETERS LIKE ‘enable_major_freeze’;
如果是 False → 合并不会做。
另外:
SELECT * FROM oceanbase.__all_zone WHERE name=‘merge_suspended’;
5. 集群有健康问题导致 OB 自动暂停合并
例如:
盘空间不足(<10%)
副本缺失(paxos 不健康)
Unit 迁移中
强制 DDL/加机器/缩容过程中
这些情况 OB 会自动阻止合并,以免扩大影响。
可以检查:
SELECT * FROM oceanbase.__all_virtual_observer WHERE status <> ‘ACTIVE’;
6. 租户级个性化合并设置导致(OB4.x 支持 per-tenant merge window)
如果你给某个租户设置了专属合并时间,而不是使用全局窗口,那么该租户也不会在 2 点合并。
查看租户级别参数:
SHOW PARAMETERS WHERE tenant = ‘xxx’ AND name LIKE ‘%merge%’;
7. 实际上已经合并完了(没有数据可合并)
如果:
最近没有写入
冷数据量小
转储刚做过
那么合并有可能一秒完成,看起来“没有执行”,其实已经做完。
你可以查:
SELECT * FROM oceanbase.__all_merge_info ORDER BY merge_start_time DESC LIMIT 5;
总结:为什么你凌晨 2 点没看到合并?
最常见 3 个原因:
原因 说明
- frozen_scn 没推进(没 freeze) 写入太少/未满足触发条件
- 合并时间窗口不包含 02:00 merge_start_time/merge_end_time 配置问题
- 上一次合并未结束或被暂停 merge_status 不是 IDLE
如果你愿意,我可以帮你 逐条排查 —— 你只需要告诉我:
你的集群/租户版本(如 4.2、4.3 等)
SHOW PARAMETERS LIKE ‘%merge%’; 的输出
SELECT * FROM oceanbase.__all_merge_info ORDER BY merge_start_time DESC LIMIT 1;
谢谢