适用版本
OceanBase 数据库 V4.x 版本。
问题现象
使用 OCP 升级 OceanBase 数据库 V4.1.0 到 V4.2.0,执行 do_upgrade_post 脚本报错 UnboundLocalError:local variable 'e' referenced before assignment。
排查 OBServer 日志发现大量 [errcode=-5188] too many partitions of tennat 的错误信息。
问题原因
从日志可以看出 max_tablet_cnt=100000,cur_tablet_cnt=100071,即最大 tablet 数量为 100000,而当前 tablet 数量为 100071,已经超过最大 tablet 数量。租户的 tablet 数量太多,而租户的内存太小就会导致此问题。
max_tablet_cnt 的值与租户内存和隐藏配置项 _max_tablet_cnt_per_gb 相关,_max_tablet_cnt_per_gb 指租户 Unit 每 1GB 内存支持的最大 tablet 数量(该隐藏配置项从 OceanBase 数据库 V4.1 版本引入)。
举例:用户的规格是 2C4G。其中 1G 是 meta 租户,3G 是正常租户。假设 _max_tablet_cnt_per_gb 配置为 20000,那么对于该用户,可以支持的最大 tablet 数量是 3 * 20000 = 60000 个 tablet。
解决方法
扩大租户内存,使计算出的最大 tablet 数量大于租户实际的 tablet 数量,然后重试升级任务。