问题现象
此问题为同一模块下两处相同性质的 BUG 导致的,现象分别如下:
现象一:
建租户卡在 CREATING 状态,或备份恢复的租户卡在 RESTORE 状态。
租户 unit_num 扩缩容卡住,且
DBA_OB_BALANCE_JOBS表中无正在进行的任务记录,或卡在 DOING 状态。
现象二:
租户扩缩容发起后,租户 1 号日志流 Leader 节点 OBServer 发生 core dump,Leader 切到的 OBServer 都会 core。
关键诊断信息
触发条件
现象一:
当 unit group 个数超过 21 时,无论是创建租户还是扩缩容等负载均衡操作都可能触发此问题。
对于同构 zone,unit group 个数等于 unit_num。
对于异构 zone,unit group 个数等于两种 unit_num 之和。
现象二:
租户扩缩容,且触发日志流组个数增多 12 倍以上(日志流组个数预期为 unit_num 的最小公倍数),例如:
unit_num扩容情况:
同构:1:1:1 扩容为 12:12:12。
异构:1:1:1 扩容为 12:1:1。
unit_num 缩容但日志流组个数扩容情况:13:13:13 -> 12:13:13,原本 13 个日志流组,缩容一个 zone 日志流组个数为 13*12。
事前巡检
避免现象一:
检查租户配置中的 unit_num 设置,确保其不超过 21。
对于异构 zone,确认两种 unit_num 之和不超过 21。
避免现象二:
- 扩缩容且 unit_num 个数超过 11 时,避免互质的 unit_num。
事后诊断
现象一:
如创建租户卡住,查看恢复过程中的日志,确认是否存在关于创建日志流选取 unit_list 时的异常记录。
日志一:
get_ug_locality_unit_list报错 -4002。
日志二:
push back homo ug,打印的 unit_list 为空。
检查资源池配置,特别是 unit group 的数量,确认是否超过 21 个。
现象二:
如遇到扩缩容过程 core dump,可根据 core 文件或堆栈,典型堆栈如下。core 的位置在 balance_ls_between_lgs_in_cell 下。

问题原因
根因是 OceanBase 数据库 V4.2.5 BP5 版本的异构 zone feature 引入的一个 BUG,在实现负载均衡统计信息类 ObTenantLSBalanceInfo 中,部分指针成员指向了 ObArray 中的对象,而 ObArray 随着 push 更多的对象超过初始 buffer 大小时,会重新分配更大的内存空间,析构并释放原本的内存,致使指针失效成为野指针。 现象一的 BUG 只导致报错,是由于使用了不会释放内存的内存分配器(ObArenaAllocator),所以在分配器整体释放前,野指针指向的对象只会析构,内存不会被释放,不会导致 core。 现象二的 BUG 是由于 ObArray 使用默认的 allocator,所以野指针指向的对象会被析构并释放内存,解引用时会 core。
问题的风险及影响
现象一:
对于 unit 数量超过 21 的同构租户,建租户或扩容操作将会失败。
可能会导致租户恢复过程中的数据同步中断,影响业务连续性和数据一致性。
现象二:
租户 Leader 所在 OBServer 进程 core,严重影响业务读写。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库企业版 V4.2.5 BP5(oceanbase-4.2.5.5-105000052025070822)及之后版本。
解决方法
现象一:
将资源池的 unit_num 设置为 21 或更少,然后重新发起租户恢复或扩容操作。
现象二:
将 unit_num 扩缩容任务回滚,关闭租户 enable_rebalance 配置项,再重新拉起 OBServer。
规避方式
在创建或调整租户配置时,确保 unit_num 不超过 21。
对于异构 zone,确保两种 unit_num 之和不超过 21。
扩缩容 unit_num 超过 11 以上时,避免非倍数的扩缩容,或 1->12 这样的大倍数扩容。
建议 unit_num 超过 21 的租户,无论主备租户,关闭租户下的
enable_transfer和enable_rebalance选项,以避免日志运行过程中可能出现的 core dump。建议 unit_group 个数超过 10 以上的大集群可升级到问题已修复版本。目前已修复的版本包含 OceanBase 数据库企业版 V4.2.5 BP7 Hotfix1(oceanbase-4.2.5.7-107010032025112814)版本、V4.2.5 BP7 Hotfix2(oceanbase-4.2.5.7-107020022025121120)版本、V4.2.5 BP7 Hotfix3(oceanbase-4.2.5.7-107030012026011319)版本、V4.2.5 BP7 Hotfix4(oceanbase-4.2.5.7-107040022026020919)版本、V4.2.5 BP7 Hotfix5(oceanbase-4.2.5.7-107050012026022515)版本、V4.2.5 BP7 Hotfix6(oceanbase-4.2.5.7-107060012026032514)版本、V4.2.5 BP7 Hotfix7(oceanbase-4.2.5.7-107070012026041221)版本、V4.2.5 BP7 Hotfix8(oceanbase-4.2.5.7-107080022026042120)版本。