问题现象
通过 OCP 升级 OeanBase 数据库 V4.3.3.1 至 OeanBase 数据库 V4.3.5.0 时 Execure upgrade post scripts 子任务失败,报错如下,

从 OCP 子任务日志中可以看到 alter system run upgrade job 'UPGRADE_ALL' 执行时失败。

关键信息
根据 Root Service 日志,可以看出 Execure upgrade post scripts 阶段创建新的系统表时,总的 tablet 数正好超过 10 万个(cur_tablet_cnt=100003)。
[2025-02-08 18:12:21.476035] WDIAG [MDS] check_create_new_tablets (ob_tablet_create_mds_helper.cpp:254) [3276357][DDLQueueTh0][T1][xxxxx-xxxxx-xxxxx-xxxxx] [lt=0][errcode=-5188] too many partitions of tenant(ret=-5188, tenant_id=1, level=0, memory_limit=5.368709120000000000e+09, tablet_cnt_per_gb=20000, max_tablet_cnt=100000, cur_tablet_cnt=100003, inc_tablet_cnt=5)
问题原因
由于之前通过应用程序初始化数据库,数据库连接配置中用户名只写了 root,未加租户名 (加租户名后为 root@obmysql),导致在 sys 租户下创建了很多 database 和 表,共近 10 万张表。根据 分区副本数限制 规则,每个 OBServer 节点的分区副本数可根据租户内存大小来预估,1G 内存约支持约 2 万 tablet,同时此系统租户默认规格为 5GB 内存 ,即 tablet 个数限制约 10 万个,而在升级集群 Execure upgrade post scripts 阶段会创建新的系统表,导致总的 tablet 数正好超过 10 万个,进而导致升级失败。
问题的风险及影响
系统租户中业务表过多可能会导致集群升级失败。强烈建议不要在系统租户中创建任何业务表或测试表。
影响租户
影响 OceanBase 数据库中的 SYS 租户,对于 MySQL 租户和 Oracle 租户无影响。
适用版本
OceanBase 数据库 V4.2.1 BP3(oceanbase-4.2.1.3-103000052023122809)及之后版本。
解决方法
删除系统租户中的所有不必要的业务表和测试表。
规避方式
避免在系统租户中创建任何业务表或测试表。