首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库 V4.2.x 报错 Too many partitions
更新时间:2026-07-24 10:01
本文介绍 OceanBase 数据库 V4.2.x 报错 Too many partitions 问题原因及处理方法。
MySQL 模式报错如下。
ErrorCode = 1499, SQLState = HY000, Details = Too many partitions (including subpartitions) were defined
Oracle 模式报错如下。
ORA-00600: internal error code, arguments: -5188, Too many partitions (including subpartitions) were defined
详细说明
主要有两种情况报此错。
情况一 超出租户 Unit 规格的分区副本数限制
如创建普通的非分区表报此错多是此原因。
根据 分区副本数限制 规则,每个 OBServer 节点的分区副本数可根据租户内存大小来预估,1G 内存约支持约 2 万 tablet (分区、索引等底层均为 tablet),如 1.5C6G 的 Unit 规格租户支持约 12 万 tablet。
可在业务租户通过如下 SQL 查询租户内当前 tablet 大致个数以评估是否与此限制有关。
SELECT svr_ip,svr_port,count(1) FROM oceanbase.dba_ob_tablet_replicas GROUP BY svr_ip,svr_port ORDER BY svr_ip,svr_port;
解决方案一:进行租户扩容
调整租户 Unit 规格,增加租户内存,参见:扩容租户。
解决方案二:优化分区表,清理设计不合理的分区
当分区表设计不合理时,一个分区表有很多无用的历史分区,或创建了过多未来使用的空的分区。 建议清理设计不合理的分区,避免造成不必要的资源浪费。
情况二 超出单个表允许的最大分区数
如创建分区数较多的二级分区表报此错多是此原因。
根据 单个表的分区个数限制,OceanBase 数据库 Oracle 模式默认最多 65536 个分区,已为最大值。
OceanBase 数据库 MySQL 模式下单个表允许的最大分区数由租户级配置项 max_partition_num 控制,默认为 8192 个,最大可调整至 65536 个。
OceanBase 数据库 MySQL 模式此限制是在 OceanBase 数据库 V4.2.1 BP3 版本中增加的,是为了兼容 MySQL 官方如下限制。
Maximum number of partitions. The maximum possible number of partitions for a given table not using the NDB storage engine is 8192. This number includes subpartitions.
OceanBase 数据库 V4.1.x 至 OceanBase 数据库 V4.2.1 BP2 没有限制单个表最大分区数,所以升级到 OceanBase 数据库 V4.2.1 BP3 及之后版本,有可能因分区数过多导致报错。
解决方案一:合理使用分区表,不建议创建过多分区
解决方案二:增大单个表允许的最大分区数
MySQL 租户 oceanbase 数据库下查询参数 SQL 如下。
SELECT * FROM gv$ob_parameters WHERE name LIKE '%max_partition_num%';
MySQL 租户 SQL 语法如下。
ALTER SYSTEM SET max_partition_num = 20000;
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.2.x 版本。