如题,在企业版3.1.2版本报该错误,开源版本应该也有类似问题。
企业版文档和开源文档都说支持8192个分区。
开源文档:
企业版文档:
报错信息如下:
pttable.sql (373.6 KB)
建表SQL见附件。
如题,在企业版3.1.2版本报该错误,开源版本应该也有类似问题。
企业版文档和开源文档都说支持8192个分区。
开源文档:
报错信息如下:
建表SQL见附件。
你好,麻烦将.sql文件转换成.txt文件上传
非常感谢您的配合,请稍等
根据您提供的sql,在单机模式下也原样复现了,其实根本原因是内存不够:
排查流程:
执行语句报错:Too many partitions (including subpartitions) were defined
报错如图:
查看代码 ob_service.cpp:1215 行
reach_tenant_partition_limit 触发错误,查看reach_tenant_partition_limit方法报错
reach_tenant_partition_limit 1638行报错:
WARN [STORAGE] reach_tenant_partition_limit_ (ob_partition_service.cpp:1638) [358][462][YB427F000001-0005E4B4365732B0] [lt=16] [dc=0] reach tenant max partition num limit(tenant_id=1, cur_part_cnt=1200, cur_pg_cnt=0, batch_cnt=8185, cur_part_mem_reserved=172032000, cur_pg_mem_reserved=0, acquired_mem=1173401600, tenant_mem_limit=322122500)
查看reach_tenant_partition_limit 1638行 代码:
此处复现的根本原因是内存不够抛出错误,但是因为reach_tenant_partition_limit方法未返回错误码,导致报错始终为:too many partitions
建议您也查看一下observer.log,是否和我的排查复现相同,如果相同欢迎您去github上提相关issue
哦哦,非常感谢,也就是说,就算仅仅创建一个空的分区表,也是有最低内存要求的。
不知道仅创建需要多少内存?
另外就是为什么MySQL模式支持的分区个数比Oracle模式支持的分区个数少?
为什么MySQL模式支持的分区个数比Oracle模式支持的分区个数少?
因为要兼容mysql 和 oracel本身的特性
mysql分区:
Mysql Restrictions and Limitations on Partitioning 在 MySQL 5.6.7 之前,未使用NDB
存储引擎,其给定表的最大可能分区数为 1024。从 MySQL 5.6.7 开始,此限制增加到 8192 个分区。无论 MySQL 服务器版本如何,此最大值都包括子分区。