---
title: "表组权重均衡应用案例 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 表组权重均衡应用案例 本节通过几个典型场景来介绍表组权重均衡在日常业务中的应用。 场景一：同 Database 下新建表的自动聚合 场景说明 业务上需要新建一批用户表，且需要按 Database 来管理这些用户表，避免 Database 内的分布式读写。 操作步骤 可以先开启新建 Database 下用户表的自动聚合…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# 表组权重均衡应用案例

更新时间：2026-07-02 18:20:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/600.manage/350.load-balancing-manage/430.tablegroup-weight-management/400.tablegroup-balancing-application-cases.md)  

本节通过几个典型场景来介绍表组权重均衡在日常业务中的应用。

## 场景一：同 Database 下新建表的自动聚合

### 场景说明

业务上需要新建一批用户表，且需要按 Database 来管理这些用户表，避免 Database 内的分布式读写。

### 操作步骤

可以先开启新建 Database 下用户表的自动聚合开关（配置项 `enable_database_sharding_none` 的值为 `True`），然后再分别创建 Database 和表。具体操作如下：

1. MySQL 模式租户的租户管理员连接数据库。

   连接示例如下，连接数据库时请以实际环境为准。

   ```shell
   obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A

   ```
 2. 将租户级配置项 `enable_database_sharding_none` 的值设置为 `True`。

   ```shell
   obclient(root@mysql001)[(none)]> ALTER SYSTEM SET enable_database_sharding_none = True;

   ```
 3. 按需创建多个 Database。

   每个 Database 创建成功后，均会默认绑定一个新的 `Sharding = 'NONE'` 的表组。

   创建 Database 的详细操作及说明，参见 [创建数据库](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005683172)。
 4. 按 Database 分批新建用户表，同一个 Database 下的用户表就会自动绑定到一个日志流上。

## 场景二：多个 Database 下新建表的聚合

### 场景说明

业务上需要新建一批用户表，且这些表与另外一个 Database A 下的用户表关联紧密（假设 Database A 在创建时已绑定一个 `Sharding = 'NONE'` 的表组），现在需要将新建的表与 Database A 下的用户表聚合，避免多个 Database 之间的分布式读写。

### 操作步骤

可以创建一个 Database B 与 Database A 绑定到同一个 `Sharding = 'NONE'` 的表组，然后再新建表。具体操作如下：

   ```
 2. 获取 Database A 绑定的表组信息。

   ```shell
   obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_DATABASES WHERE DATABASE_NAME = 'databse_name';

   ```
 3. 使用以下语句创建一个新的 Database B，并指定其表组为 Database A 绑定的表组。

   ```sql
   CREATE DATABASE databae_name DEFAULT tablegroup = tablegroup_name;

   ```

   有关 `CREATE DATABASE` 语句的详细说明及示例，参见 [CREATE DATABASE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686124)。
 4. 在新建的 Database B 下新建用户表，新建的用户表就会与 Database A 下的用户表自动绑定到同一个日志流上。

## 场景三：多个 Database 的重新聚合

### 场景说明

用户表已经创建完成，现在需要将关联的多个 Database 下的用户表重新聚合，避免多个 Database 之间的分布式读写。

### 操作步骤

1. MySQL 模式租户的租户管理员连接数据库。

   ```
 2. 使用以下语句，创建一个 `Sharding = 'NONE'` 的表组。

   ```sql
   CREATE TABLEGROUP tablegroup_name Sharding = 'NONE';

   ```
 3. 使用以下语句，将多个 Database 绑定到新建的表组中。

   ```sql
   ALTER DATABASE database_name tablegroup [=] tablegroup_name;

   ```

   有关 `ALTER DATABASE` 语句的详细说明及示例，参见 [ALTER DATABASE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686105)。
 4. 手动触发分区均衡。

   ```shell
   obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE();

   ```

   手动触发分区均衡的详细操作，参见 [手动触发分区均衡](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682441)。
 5. 等待分区均衡任务完成，即可完成多个 Database 下用户表的聚合。

   分区均衡过程中，可以通过视图来查看均衡任务的进度，语句如下：

   ```shell
   obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOBS WHERE JOB_TYPE = 'PARTITION_BALANCE';

   ```

   查看分区均衡任务进度的详细操作，参见 [查看后台的分区均衡任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682442)。

## 场景四：热点表组独占

### 场景说明

开启新建 Database 下用户表的自动聚合开关（配置项 `enable_database_sharding_none` 的值为 `True`）后，每创建一个 Database 同时就会默认创建一个 `Sharding = 'NONE'` 的表组（该方式创建的表组的权重默认为 `1`），现根据业务需要，期望热点表组独占日志流。

### 操作步骤

假设当前租户有 9 个 `Sharding = 'NONE'` 表组 `TG_DB_1`～`TG_DB_9`。其中，`TG_DB_1` 由于聚合了多个 Database 的用户表，成为热点表组，期望独占一个日志流。

当前，这些表组的权重分布如下所示。

![表组权重初始分布](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.4.1/3.load-balance/hot-tablegroup-alone1.png)

可以按大权重（100% * `Sharding = 'NONE'` 的表组的总数）来设置热点表组 `TG_DB_1`的权重，即可实现独占。具体操作如下：

   ```
 2. 确认租户下带权重的 `Sharding = 'NONE'` 的表组的总数。

   ```shell
   obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_OBJECT_BALANCE_WEIGHT;  

   ```
 3. 为热点表组设置权重。

   假设查询出来带权重的 `Sharding = 'NONE'` 的表组的总数为 9，则设置热点表组的权重为 9 的语句如下：

   ```shell
   obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(9,'TG_DB_1');

   ```
 4. 手动触发分区均衡。

   ```

   ```

均衡完成后，这些表组的权重分布如下：

![热点表组独占分布](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.4.1/3.load-balance/hot-tablegroup-alone2.png)

## 场景五：表组按权重分布

### 场景说明

开启新建 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` 几个表组中表的数据量较大，但不足以独占一个日志流。

![表组权重初始分布2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.4.1/3.load-balance/tablegroup-balance-weight1.png)

可以按中权重（50% * `Sharding = 'NONE'` 的表组的总数）来设置 `TG_DB_1`、`TG_DB_2`、`TG_DB_4` 这些表组的权重。具体操作如下：

   ```
 3. 为表组 `TG_DB_1`、`TG_DB_2`、`TG_DB_4` 设置权重。

   假设查询出来带权重的 `Sharding = 'NONE'` 的表组的总数为 9，则分别为表组 `TG_DB_1`、`TG_DB_2`、`TG_DB_4` 设置权重为 4（`50% * 9` 的结果向下取整）的语句如下：

   ```shell
   obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(4,'TG_DB_1');

   ```

   ```shell
   obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(4,'TG_DB_2');

   ```

   ```shell
   obclient(root@mysql001)[(none)]> CALL DBMS_BALANCE.SET_TABLEGROUP_BALANCE_WEIGHT(4,'TG_DB_4');

   ```

   ```

![表组权重最终分布](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.4.1/3.load-balance/tablegroup-balance-weight2.png)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
