首批通过分布式安全可靠测评,为关键业务系统打造
表组权重均衡应用案例
更新时间:2026-07-02 18:20:00
本节通过几个典型场景来介绍表组权重均衡在日常业务中的应用。
场景一:同 Database 下新建表的自动聚合
场景说明
业务上需要新建一批用户表,且需要按 Database 来管理这些用户表,避免 Database 内的分布式读写。
操作步骤
可以先开启新建 Database 下用户表的自动聚合开关(配置项 enable_database_sharding_none 的值为 True),然后再分别创建 Database 和表。具体操作如下:
MySQL 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A将租户级配置项
enable_database_sharding_none的值设置为True。obclient(root@mysql001)[(none)]> ALTER SYSTEM SET enable_database_sharding_none = True;按需创建多个 Database。
每个 Database 创建成功后,均会默认绑定一个新的
Sharding = 'NONE'的表组。创建 Database 的详细操作及说明,参见 创建数据库。
按 Database 分批新建用户表,同一个 Database 下的用户表就会自动绑定到一个日志流上。
场景二:多个 Database 下新建表的聚合
场景说明
业务上需要新建一批用户表,且这些表与另外一个 Database A 下的用户表关联紧密(假设 Database A 在创建时已绑定一个 Sharding = 'NONE' 的表组),现在需要将新建的表与 Database A 下的用户表聚合,避免多个 Database 之间的分布式读写。
操作步骤
可以创建一个 Database B 与 Database A 绑定到同一个 Sharding = 'NONE' 的表组,然后再新建表。具体操作如下:
MySQL 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A获取 Database A 绑定的表组信息。
obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_DATABASES WHERE DATABASE_NAME = 'databse_name';使用以下语句创建一个新的 Database B,并指定其表组为 Database A 绑定的表组。
CREATE DATABASE databae_name DEFAULT tablegroup = tablegroup_name;有关
CREATE DATABASE语句的详细说明及示例,参见 CREATE DATABASE。在新建的 Database B 下新建用户表,新建的用户表就会与 Database A 下的用户表自动绑定到同一个日志流上。
场景三:多个 Database 的重新聚合
场景说明
用户表已经创建完成,现在需要将关联的多个 Database 下的用户表重新聚合,避免多个 Database 之间的分布式读写。
操作步骤
MySQL 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A使用以下语句,创建一个
Sharding = 'NONE'的表组。CREATE TABLEGROUP tablegroup_name Sharding = 'NONE';使用以下语句,将多个 Database 绑定到新建的表组中。
ALTER DATABASE database_name tablegroup [=] tablegroup_name;有关
ALTER DATABASE语句的详细说明及示例,参见 ALTER DATABASE。手动触发分区均衡。
obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE();手动触发分区均衡的详细操作,参见 手动触发分区均衡。
等待分区均衡任务完成,即可完成多个 Database 下用户表的聚合。
分区均衡过程中,可以通过视图来查看均衡任务的进度,语句如下:
obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOBS WHERE JOB_TYPE = 'PARTITION_BALANCE';查看分区均衡任务进度的详细操作,参见 查看后台的分区均衡任务。
场景四:热点表组独占
场景说明
开启新建 Database 下用户表的自动聚合开关(配置项 enable_database_sharding_none 的值为 True)后,每创建一个 Database 同时就会默认创建一个 Sharding = 'NONE' 的表组(该方式创建的表组的权重默认为 1),现根据业务需要,期望热点表组独占日志流。
操作步骤
假设当前租户有 9 个 Sharding = 'NONE' 表组 TG_DB_1~TG_DB_9。其中,TG_DB_1 由于聚合了多个 Database 的用户表,成为热点表组,期望独占一个日志流。
当前,这些表组的权重分布如下所示。

可以按大权重(100% * Sharding = 'NONE' 的表组的总数)来设置热点表组 TG_DB_1的权重,即可实现独占。具体操作如下:
MySQL 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A确认租户下带权重的
Sharding = 'NONE'的表组的总数。obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_OBJECT_BALANCE_WEIGHT;为热点表组设置权重。
假设查询出来带权重的
Sharding = 'NONE'的表组的总数为 9,则设置热点表组的权重为 9 的语句如下:obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(9,'TG_DB_1');手动触发分区均衡。
obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE();手动触发分区均衡的详细操作,参见 手动触发分区均衡。
等待分区均衡任务完成,即可完成多个 Database 下用户表的聚合。
分区均衡过程中,可以通过视图来查看均衡任务的进度,语句如下:
obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOBS WHERE JOB_TYPE = 'PARTITION_BALANCE';查看分区均衡任务进度的详细操作,参见 查看后台的分区均衡任务。
均衡完成后,这些表组的权重分布如下:

场景五:表组按权重分布
场景说明
开启新建 Database 下用户表的自动聚合开关(配置项 enable_database_sharding_none 的值为 True)后,每创建一个 Database 同时就会默认创建一个 Sharding = 'NONE' 的表组(该方式创建的表组的权重默认为 1),现根据业务需要,期望打散用户表较多或数据量较大或访问流量较大的表组。
操作步骤
假设当前租户有 9 个 Sharding = 'NONE' 表组 TG_DB_1~TG_DB_9。其中,TG_DB_1、TG_DB_2、TG_DB_4 几个表组中表的数据量较大,但不足以独占一个日志流。
当前,这些表组的权重分布如下所示。

可以按中权重(50% * Sharding = 'NONE' 的表组的总数)来设置 TG_DB_1、TG_DB_2、TG_DB_4 这些表组的权重。具体操作如下:
MySQL 模式租户的租户管理员连接数据库。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A确认租户下带权重的
Sharding = 'NONE'的表组的总数。obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_OBJECT_BALANCE_WEIGHT;为表组
TG_DB_1、TG_DB_2、TG_DB_4设置权重。假设查询出来带权重的
Sharding = 'NONE'的表组的总数为 9,则分别为表组TG_DB_1、TG_DB_2、TG_DB_4设置权重为 4(50% * 9的结果向下取整)的语句如下:obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(4,'TG_DB_1');obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(4,'TG_DB_2');obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(4,'TG_DB_4');手动触发分区均衡。
obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE();手动触发分区均衡的详细操作,参见 手动触发分区均衡。
等待分区均衡任务完成,即可完成多个 Database 下用户表的聚合。
分区均衡过程中,可以通过视图来查看均衡任务的进度,语句如下:
obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOBS WHERE JOB_TYPE = 'PARTITION_BALANCE';查看分区均衡任务进度的详细操作,参见 查看后台的分区均衡任务。
均衡完成后,这些表组的权重分布如下:
