• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    OceanBase建表分区数超限报错解决分析

    发布者: 姬7089 | 发布时间: 2025-6-20 09:09| 查看数: 63| 评论数: 0|帖子模式

    背景

    OceanBase 单机租户允许创建的最大分区数是多少?作者通过分区超限错误排查,计算出单机允许创建的最大分区数量。
    1. ERROR 1499 (HY000): Too many partitions (including subpartitions) were defined
    复制代码
    创建表报错,虽然是内部错误,但是错误信息是指:创建了太多了分区。
    1. [root@observer04 ~]# mysql -h10.186.64.125 -P2883 -uroot@wenchao_mysql#hwc_cluster:1682755171 -p"xxxx"  
    2. MySQL [lss]> CREATE TABLE `wms_order` (
    3.   `A1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A1',
    4.   `A2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A2',
    5.   `A3` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A3',
    6.   `A4` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A4',
    7.   `A5` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A5',
    8.   `A6` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A6',
    9.   `A7` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A7',
    10.   `A8` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A8',
    11.   `A9` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A9',
    12.   `A10` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'A10'
    13. ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.0' REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 COMMENT = '物流订单表'
    14. MySQL [lss]> ERROR 1499 (HY000): Too many partitions (including subpartitions) were defined
    复制代码
    接下来我们分析一下问题的原因。

    排查


    2.1 检查参数


    • 检查每个 OBServer 上可以创建最大的分区数量,当前是 500000。
    1. [root@observer04 ~]# mysql -h10.186.64.125 -P2883 -uroot@sys#hwc_cluster:1682755171 -p"xxxx" -A oceanBase
    2. MySQL [oceanBase]> select * from __all_virtual_sys_parameter_stat where name like '%_max_partition_%';
    3. +-------+----------+---------------+----------+-------------------------------+-----------+--------+--------------+---------------------------------------------+-------------+----------+---------------+---------+---------+-------------------+
    4. | zone  | svr_type | svr_ip        | svr_port | name                          | data_type | value  | value_strict | info                                        | need_reboot | section  | visible_level | scope   | source  | edit_level        |
    5. +-------+----------+---------------+----------+-------------------------------+-----------+--------+--------------+---------------------------------------------+-------------+----------+---------------+---------+---------+-------------------+
    6. | zone1 | observer | 10.186.64.122 |     2882 | _max_partition_cnt_per_server | NULL      | 500000 | NULL         | specify max partition count on one observer |        NULL | OBSERVER | NULL          | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
    7. +-------+----------+---------------+----------+-------------------------------+-----------+--------+--------------+---------------------------------------------+-------------+----------+---------------+---------+---------+-------------------+
    复制代码

    • 检查当前分区数量的和,目前并没有超过这个限制(500000)。
    1. MySQL [oceanBase]> select count(*) from v$partition;
    2. +----------+
    3. | count(*) |
    4. +----------+
    5. |   421485 |
    6. +----------+
    复制代码
    2.2 检查回收站


    • 检查回收站是否开启?
    1. [root@observer04 ~]# mysql -h10.186.64.125 -P2883 -uroot@wenchao_mysql#hwc_cluster:1682755171 -p"xxxx"
    2. MySQL [lss]> show variables like '%recy%';
    3. +---------------+-------+
    4. | Variable_name | Value |
    5. +---------------+-------+
    6. | recyclebin    | ON    |
    7. +---------------+-------+
    8. 1 row in set (0.01 sec)
    复制代码

    • 检查回收站中是否存在未删除的分区表?
    1. MySQL [lss]> show recyclebin;
    2. +-----------------------------------------+---------------+-------+----------------------------+
    3. | OBJECT_NAME                             | ORIGINAL_NAME | TYPE  | CREATETIME                 |
    4. +-----------------------------------------+---------------+-------+----------------------------+
    5. | __recycle_$_1682755171_1689139725669688 | mytable_1     | TABLE | 2023-07-12 13:28:45.687379 |
    6. | __recycle_$_1682755171_1689139737584112 | mytable_1     | TABLE | 2023-07-12 13:28:57.584660 |
    7. | __recycle_$_1682755171_1689139750594392 | t1            | TABLE | 2023-07-12 13:29:10.594118 |
    8. +-----------------------------------------+---------------+-------+----------------------------+
    9. 3 rows in set (0.01 sec)
    复制代码
    如果存在,需要和业务侧沟通是否可以清理。回收站的表清理后,发现分区表数量减少,但是创建表依旧报错。
    查看回收站中中对象保留天数。
    1. MySQL [lss]> SHOW PARAMETERS LIKE 'recyclebin_object_expire_time'\G;
    2. *************************** 1. row ***************************
    3.    zone: zone1
    4.   svr_type: observer
    5. svr_ip: 10.186.64.122
    6.   svr_port: 2882
    7.    name: recyclebin_object_expire_time
    8. data_type: NULL
    9.   value: 0s
    10.    info: recyclebin object expire time, default 0 that means auto purge recyclebin off. Range: [0s, +∞)
    11. section: ROOT_SERVICE
    12.   scope: CLUSTER
    13. source: DEFAULT
    复制代码
    1. row in set (0.02 sec)
    复制代码
    配置项
    1. recyclebin_object_expire_time
    复制代码
    的取值说明如下:

    • 当其值为 0s 时,表示关闭自动 Purge 回收站功能。
    • 当其值不为 0s 时,表示回收一段时间前进入回收站的 Schema 对象。

    2.3 检查租户内存

    找到分区数最多的 10 个租户。
    1. [root@observer04 ~]# mysql -h10.186.64.125 -P2883 -uroot@sys#hwc_cluster:1682755171 -p"xxxx"
    2. // 1. 找到分区数最多的 10 个租户
    3. SELECT t2.tenant_name,t2.tenant_id, t1.replica_count
    4. FROM
    5. (SELECT tenant_id, COUNT(*) AS replica_count
    6.   FROM __all_virtual_partition_info
    7.   GROUP BY tenant_id
    8.   ORDER BY replica_count DESC
    9.   LIMIT 10) t1
    10. JOIN
    11. (SELECT tenant_id, tenant_name
    12.   FROM __all_tenant) t2
    13. ON t1.tenant_id=t2.tenant_id
    14. ORDER BY replica_count DESC;
    15. +-------------------+-----------+---------------+
    16. | tenant_name       | tenant_id | replica_count |
    17. +-------------------+-----------+---------------+
    18. | wenchao_mysql     |      1100 |        107853 |
    19. | wenchao_01        |      1088 |         99846 |
    20. | wenchao_02        |      1104 |         15873 |
    21. | wenchao_03        |         1 |          3867 |
    22. | wenchao_04        |      1044 |          3270 |
    23. | wenchao_05        |      1066 |          2811 |
    24. | wenchao_06        |      1079 |          2658 |
    25. | wenchao_07        |      1103 |          2103 |
    26. | wenchao_08        |      1057 |          2040 |
    27. | wenchao_09        |      1016 |          1950 |
    复制代码
    1. rows in set (0.13 sec)
    复制代码

    • 查找租户有多少表。
    1. select count(*),svr_Ip from __all_virtual_meta_table where tenant_id=1100 and role=1 group by svr_ip;
    2. +----------+-------------+
    3. | count(*) | svr_Ip      |
    4. +----------+-------------+
    5. |   11921  |10.186.64.103|
    6. |   11868  |10.186.64.104|
    7. |   12013  |10.186.64.105|
    8. +----------+-------------+
    9. 3 rows in set (0.35 sec)
    复制代码

    • 计算租户需要扩容内存大小。


    • 租户当前分区总数 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
    注意:单个副本分区所需总内存 > 租户可用内存上限,租户所需内存超限,需要对租户内存进行扩容。

    • 根据租户内存计算最大分区数量。
    • 单机租户允许创建的最大分区数量=(max_memory-memstore_limit)/partition_mem_n
    • 单机租户允许创建的最大分区数量=(24-24*0.8)/(5.75/(107853/3))=4.8/(5.75/(107853/3))=30011
    • partition_mem_n:指的是单个分区所需总内存
    临时处理方案: 扩容租户内存。
    根源治理: 不可能无限扩内存;给出业务方合理的分区数量限制,建议业务侧合理使用分区表,制定合理的定期清理策略。

    总结

    根据上述计算得出:单机租户允许创建的最大分区数量为 30011,建议业务侧注意控制分区数量,以免超限,对业务造成影响。
    以上就是OceanBase建表分区数超限报错解决分析的详细内容,更多关于OceanBase建表分区数超限报错的资料请关注脚本之家其它相关文章!

    来源:https://www.jb51.net/database/297582jcb.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表