oceanbase v4为什么2点没有执行合并操作

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】新部署的oceanbase v4集群,没改过配置,为什么2点没有执行合并操作

1 个赞

合并(Merge)不会固定在某个时间强制触发,它只在 合并时间窗口内、且满足触发条件 时才会执行。所以“到点没合并”几乎都是以下原因。

:blue_square: 1. 没有满足最关键触发条件(最常见)

OceanBase 合并要满足 frozen_scn 推进(即需要有新的转储点/冻结点)。

也就是说:

当天没有 转储/冻结 (freeze),就不会触发合并

如果数据量小、写入少,系统可能 长时间不 freeze,自然也不会合并

你可以查看:

SHOW PARAMETERS LIKE ‘freeze_trigger_%’;

以及查看最新的 freeze:

SELECT * FROM oceanbase.__all_freeze_info ORDER BY freeze_ts DESC;

:blue_square: 2. 合并时间窗口没有覆盖你期待的“凌晨 2 点”时间

OceanBase 有参数控制合并可执行时间段:

merge_start_time

merge_end_time

如果你的窗口不是覆盖 02:00,那当然不会执行。

例如:

SHOW PARAMETERS LIKE ‘merge%time%’;

常见误区:
很多集群默认窗口是 03:00–06:00,不是 02:00。

:blue_square: 3. 上一次合并尚未结束(合并状态未回到 idle)

如果上一次合并卡住、被打断或耗时长,会导致下一次合并不能开始。

检查合并状态:

SELECT * FROM oceanbase.__all_zone WHERE name=‘merge_status’;

如果状态不是 IDLE(如 SUSPENDED、ERROR、LS_WAITING 等),合并不会继续。

:blue_square: 4. 合并被暂停了(某些运维操作会造成 suspend)

查看是否被人工或系统暂停:

SHOW PARAMETERS LIKE ‘enable_major_freeze’;

如果是 False → 合并不会做。

另外:

SELECT * FROM oceanbase.__all_zone WHERE name=‘merge_suspended’;

:blue_square: 5. 集群有健康问题导致 OB 自动暂停合并

例如:

盘空间不足(<10%)

副本缺失(paxos 不健康)

Unit 迁移中

强制 DDL/加机器/缩容过程中

这些情况 OB 会自动阻止合并,以免扩大影响。

可以检查:

SELECT * FROM oceanbase.__all_virtual_observer WHERE status <> ‘ACTIVE’;

:blue_square: 6. 租户级个性化合并设置导致(OB4.x 支持 per-tenant merge window)

如果你给某个租户设置了专属合并时间,而不是使用全局窗口,那么该租户也不会在 2 点合并。

查看租户级别参数:

SHOW PARAMETERS WHERE tenant = ‘xxx’ AND name LIKE ‘%merge%’;

:blue_square: 7. 实际上已经合并完了(没有数据可合并)

如果:

最近没有写入

冷数据量小

转储刚做过

那么合并有可能一秒完成,看起来“没有执行”,其实已经做完。

你可以查:

SELECT * FROM oceanbase.__all_merge_info ORDER BY merge_start_time DESC LIMIT 5;

:green_square: 总结:为什么你凌晨 2 点没看到合并?

最常见 3 个原因:

原因 说明

  1. frozen_scn 没推进(没 freeze) 写入太少/未满足触发条件
  2. 合并时间窗口不包含 02:00 merge_start_time/merge_end_time 配置问题
  3. 上一次合并未结束或被暂停 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;

1 个赞

谢谢