开发者社区> 问答> 正文

oceanbase库,建表报错

建表报错, too many partitions (including subpartitions) were defined, 这是啥原因。 建表语句: CREATE TABLE sjpt_pb_yearexaminfo ( id bigint(64) NOT NULL COMMENT '主键', PRIMARY KEY (id) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '年报' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

展开
收起
游客bz2dq35tv6yea 2021-09-06 16:01:53 1743 0
6 条回答
写回答
取消 提交回答
  • 您提供的建表语句并没有涉及分区或子分区的定义,但报错信息“too many partitions (including subpartitions) were defined”明确表示在创建表的过程中遇到了分区数量超过OceanBase数据库允许的最大限制的问题。

    在OceanBase数据库中,每个表都有其分区数量的上限,当试图创建的分区或子分区数量超过了OceanBase预设的限制时,就会出现此错误。具体限制值可能因OceanBase的不同版本和配置而异,通常需要根据实际数据库系统的参数设置来合理规划分区策略。

    若要解决这个问题,请检查您的建表语句是否存在显式或隐式的分区定义,并确保分区数量符合OceanBase的限制。如果没有显示分区相关定义,请确认是否有其他触发分区创建的约束或者数据库层面的默认策略,并相应地减少分区数量或调整数据库配置。

    2024-01-09 16:47:13
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,该错误是因为你定义了太多的分区(包括子分区)。阿里云OceanBase数据库在分区表中存在分区数的限制,可能是你定义的分区数超过了限制。

    建议检查一下你的分区定义,确保分区数在可接受范围内,可以尝试减少分区数或者重新设计表结构,以满足数据库的要求。

    2024-01-03 19:46:32
    赞同 展开评论 打赏
  • 需要按照如下来排查问题:

    1、检查参数

    • 检查每个 OBServer 上可以创建最大的分区数量,检查当前分区数量的和,目前并没有超过这个限制。
      MySQL [oceanBase]> select count(*) from v$partition;
      +----------+
      | count(*) |
      +----------+
      |   421485 |
      +----------+
      

    2、检查回收站中是否存在未删除的分区表?如果存在,需要和业务侧沟通是否可以清理。

    3、检查租户内存。

    • 计算租户需要扩容内存大小。
    • 租户当前分区总数 num=107853/副本数
    • 租户可用内存上限=(1-memstore_limit_percentage)租户 unit 的内存大小 =(1-0.8)24GB=4.8GB
    • 单个副本分区所需总内存 partition_mem=128k(107853/3)+max(1000,(107853/3)/10)400k=5.75GB

    建议业务侧合理使用分区表,制定合理的定期清理策略。

    ——参考链接

    2024-01-02 22:16:46
    赞同 1 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    具体来说,在OBServer中,一个分区(partition)可以看作是一个数据库的逻辑分组,它可以按照某个条件来分割一个大的表。当创建表时,如果指定了过多的分区,会导致建表失败。
    在您提供的建表语句中,您定义了一个名为"sjpt_pb_yearexamininfo"的表,该表的ID列是主键,使用B树进行索引。此外,您还指定了表的字符集为utf8,校对规则为utf8_general_ci,行格式为动态。最后,您还设置了FOREIGN_KEY_CHECKS为1。
    想解决这个问题,可以尝试减少分区的数量,或者删除一些不必要的分区。另外,建议您检查一下表的索引和分区策略,确保它们与表的实际需求相匹配。image.png

    2023-12-29 10:49:33
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    您在创建一个名为sjpt_pb_yearexaminfo的表。但是,您遇到了一个错误信息,提示您定义了太多的分区(包括子分区)。错误信息为:

    too many partitions (including subpartitions) were defined

    这表明您在表定义中定义了过多的分区,导致该语句无法执行。在OceanBase中,每个表最多支持1000个分区。为了解决这个问题,您可以尝试以下方法:

    1. 减少分区数量。您可以根据实际需求重新考虑表的分区策略,以减少分区数量。例如,您可以将多个分区合并为一个分区,或者将某些列添加到分区条件中。
    2. 如果您的表有大量数据,您可以考虑使用其他存储引擎(如MyISAM)或调整表的结构以提高性能。
    3. 如果您的表需要更多的分区,您可以考虑将数据拆分到多个表中,并通过主键或唯一索引进行关联。
    2023-12-27 20:48:05
    赞同 展开评论 打赏
  • ERROR 4684 (HY000) : Too many partitions were defined for this tenant
    OceanBase 错误码:4684

    错误原因:达到租户分区上限,无法为租户创建更多的分区。

    解决方式:查看回收站是否还留存有分区。

    如果有,在租户连接下执行 purge recyclebin,等分区被 GC 完成之后,可以空出来一部分分区空间。

    如果没有,说明这个租户已达到创建分区上限,需要给租户加内存来创建更多分区。
    https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218682
    image.png

    2023-12-27 13:31:37
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
开源HTAP OceanBase产品揭秘 立即下载
云数据库OceanBase 架构演进及在金融核心系统中的实践 立即下载
自研金融数据库OceanBase的创新之路 立即下载