首批通过分布式安全可靠测评,为关键业务系统打造
Unit 无法 GC 导致无法负载均衡
更新时间:2026-06-10 09:46
问题现象
查看内部表发现 server 的资源是足够的(包括内存和 CPU),创建新的租户会由于资源不足失败,负载均衡由于资源不足无法发起。 日志里会持续打印 old tenant can't be dropped 的信息。
关键诊断信息
触发条件
备份恢复没有完成又发生了 Unit 迁移。
事前诊断
无。
事后诊断
日志里会持续打印 old tenant can't be dropped。
问题原因
Unit 的 GC 要求所有的 pg 被释放,pg 的释放要求 SSTable 的引用计数为 0,但是 ObRecoveryDataMgr 模块在备份恢复没有完成又发生了 Unit 迁移的场景下会 hold 住 SSTable 的引用计数,这个计数必须等 pg 释放才能减掉,所以引入了循环依赖,SSTable 引用计数无法归 0。
问题的风险及影响
Unit 无法 GC 资源无法释放,导致系统资源不足。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库 V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本。
解决方法及规避方式
- 重启出问题的 OBServer 节点。
- 备份恢复没有完成尽量不要 Unit 迁移。
- 升级到问题已修复版本,目前已修复的版本包含 OceanBase 数据库 V3.2.3 BP10(oceanbase-3.2.3.3-110000092023091219)、V3.2.4 BP6(oceanbase-3.2.4.6-106000062023110109)及之后版本。