创建分区表错误时报 1499 错误,提示分区数超限。本文介绍该问题的原因以及处理方法。
适用版本
OceanBase 数据库所有版本
问题现象
建表失败并提示错误,错误信息如下。
ERROR 1499 (HY000): Too many partitions (including subpartitions) were defined
问题原因
根据错误代码,可知错误原因为建表的分区过多,因此查看建表的 SQL 语句,发现错误原因为表的分区数量超过了上限。OBServer 中分区过多后,会导致 CLOG 主备 keep alive 的 rpc 开销增大、后台遍历分区的定时任务的开销增大、每个分区占用的内存增加、容灾场景下,系统恢复时间变慢。因此 OceanBase 数据库增加了分区表中分区数量的限制。
建表时,应注意以下两个限制条件:
建表语句指定创建的分区数量必须小于等于分区上限。OceanBase 数据库社区版分区表的分区上限为 8192。
整个 OceanBase 集群范围内,每台物理机上的 分区总数 必须在分区上限以内。每台物理机分区总数上限值为 50000。
解决方法
使用以下 SQL 检查系统单台物理机上总分区数量是否超过上限。
obclient> SELECT svr_ip, count(*) FROM __all_meta_table GROUP BY svr_ip;修改建表语句,将分区数量指定为小于等于分区上限。