首批通过分布式安全可靠测评,为关键业务系统打造
设置表组权重
更新时间:2026-07-01 10:41:44
可以通过 PL 系统包 DBMS_BALANCE 为 Sharding = 'NONE' 的表组设置权重,使不同的表组按照权重分布,以实现自动聚合到表组的 Database 按权重分布。
使用限制及注意事项
当前仅 MySQL 模式支持设置表组权重。
在 V4.4.2 版本中:
对于 V4.4.2 BP1(不含)之前版本,仅支持为 Sharding 属性为
NONE的表组设置权重。对于 V4.4.2 BP1 及其之后版本,仅支持为
SHARDING = 'NONE'+SCOPE = 'SERVER'和SHARDING = 'NONE'+SCOPE = 'ZONE'的表组设置权重,不支持为SHARDING = 'NONE'+SCOPE = 'CLUSTER'的表组设置权重。
设置表组权重时,建议表组权重的档位尽量少,建议最多划分三挡:
大权重 = 100% *
Sharding = 'NONE'的表组的总数中权重 = 50% *
Sharding = 'NONE'的表组的总数小权重 = 1
对于修改配置项
enable_database_sharding_none=True后,新建 DataBase 时创建的默认表组,其权重为 1。其他未设置过表组权重的Sharding = 'NONE'的表组,其默认权重为 0,不参与权重均衡。对于带权重的表组,表组中所有表的表级、分区级权重均无效。有关表级、分区级权重的相关操作及说明,参见 设置分区权重。
设置权重
用户登录集群的 MySQL 租户。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql001#obdemo -p***** -A(可选)创建
Sharding = 'NONE'的表组。例如,创建一个表组
TG_DB_test。obclient(root@mysql001)[test]> CREATE TABLEGROUP TG_DB_test Sharding = 'NONE';说明
在 V4.4.2 版本中,对于 V4.4.2 BP1 及之后版本,创建
Sharding = 'NONE'的表组时,如果不指定SCOPE属性,则默认创建的是SHARDING = 'NONE'+SCOPE = 'SERVER'的表组。根据业务需求,设置表组权重。
表组权重仅支持整数,取值范围为 [1, +∞)。设置表组的权重为 10,语句如下:
obclient(root@mysql001)[test]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(10,'TG_DB_test');也支持
sys租户为指定用户租户的表组设置权重,语句如下:obclient(root@sys)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(10,'TG_DB_test') TENANT = 'mysql001';完成后,查看表组的权重信息。
obclient(root@mysql001)[test]> SELECT TABLEGROUP_NAME, WEIGHT, TABLEGROUP_ID, OBJECT_ID FROM oceanbase.DBA_OB_OBJECT_BALANCE_WEIGHT WHERE TABLEGROUP_NAME = 'TG_DB_test';查询结果如下:
+-----------------+--------+---------------+-----------+ | TABLEGROUP_NAME | WEIGHT | TABLEGROUP_ID | OBJECT_ID | +-----------------+--------+---------------+-----------+ | TG_DB_test | 10 | 500007 | 500007 | +-----------------+--------+---------------+-----------+ 1 row in set
后续操作
设置表组权重后,系统不会立即进行权重均衡。如果用户期望尽快进行权重均衡,可以通过调用 DBMS_BALANCE.TRIGGER_PARTITION_BALANCE 子程序,手动触发一次分区均衡。手动触发分区均衡的详细操作,参见 手动触发分区均衡。
或者,用户也可以等待定时分区均衡任务的触发。有关定时分区均衡任务的相关信息,参见 配置定时分区均衡任务。
相关文档
有关表组权重的应用案例,参见 表组权重均衡应用案例。