---
title: "设置分区权重 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 设置分区权重 可以根据业务需要，为表设置分区权重。按照级别从上到下，支持设置表级、分区级的分区权重。 使用限制及注意事项 仅用户租户支持手动设置分区权重，系统租户不支持设置分区权重。 当前仅支持对非分区表、以及分区表的分区设置分区权重，暂不支持对二级分区设置分区权重。 仅支持对已存在的实体分区设置权重，不支持在建表时…
---
切换语言

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

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

# 设置分区权重

更新时间：2026-06-02 12:31:14

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/600.manage/350.load-balancing-manage/450.balance-weight-management/100.set-the-balance-weight-for-a-table.md)  

可以根据业务需要，为表设置分区权重。按照级别从上到下，支持设置表级、分区级的分区权重。

## 使用限制及注意事项

- 仅用户租户支持手动设置分区权重，系统租户不支持设置分区权重。
 - 当前仅支持对非分区表、以及分区表的分区设置分区权重，暂不支持对二级分区设置分区权重。
 - 仅支持对已存在的实体分区设置权重，不支持在建表时指定权重，即需要先创建表后，再为表设置分区权重。
 - 分区权重仅支持整数，取值范围为 [1, +∞)。默认情况下，分区没有权重。
 - 设置分区权重时，建议分区权重的档位尽量少，建议最多划分三挡：

     - 大权重 = 100% * 分区数
     - 中权重 = 50% * 分区数
     - 小权重 = 1
 - 对于不需要参与权重均衡的分区表，建议不要设置分区权重。
 - 设置分区权重时，下级分区默认继承上级分区权重。如果同时对多个级别设置了分区权重，则下级权重将覆盖上级权重。
 - 设置分区权重后，如果用户执行了 Offline DDL 操作（例如 Truncate Table、Truncate Partition 等操作）导致分区实体发生变化，原来设置的分区权重也会失效，需要用户重新设置分区权重。可能会导致分区权重失效的 Offline DDL 参见 [Online DDL 和 Offline DDL 操作（MySQL 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686194) 和 [Online DDL 和 Offline DDL 操作（Oracle 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686345)。

## MySQL 模式下设置分区权重

1. 用户登录集群的 MySQL 租户。

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

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

   ```
 2. （可选）创建待设置分区权重的表。

   例如，创建一个 Hash 分区表 `tbl1_h`。

   ```shell
   obclient(root@mysql001)[test]> CREATE TABLE tbl1_h(col1 INT,col2 VARCHAR(50)) PARTITION BY HASH(col1) PARTITIONS 5;

   ```
 3. （可选）获取表的分区信息。

   ```shell
   obclient(root@mysql001)[test]> SELECT TABLE_NAME, PARTITION_NAME FROM information_schema.PARTITIONS WHERE TABLE_NAME ='tbl1_h';

   ```

   查询结果如下：

   ```shell
   +------------+----------------+
   | TABLE_NAME | PARTITION_NAME |
   +------------+----------------+
   | tbl1_h     | p0             |
   | tbl1_h     | p3             |
   | tbl1_h     | p2             |
   | tbl1_h     | p4             |
   | tbl1_h     | p1             |
   +------------+----------------+
   5 rows in set

   ```
 4. 根据业务需求，选择合适的级别，设置分区权重。

   分区权重仅支持整数，取值范围为 [1, +∞)。默认情况下，分区没有权重。

      - 设置表级权重

       支持设置分区表或非分区表的表级分区权重。例如，设置分区表 `tbl1_h` 的分区权重为 1，语句如下。

       ```shell
       obclient(root@mysql001)[test]> CALL DBMS_BALANCE.SET_BALANCE_WEIGHT(1,'test','tbl1_h');

       ```
      - 设置一级分区级权重

       设置表 `tbl1_h` 中一级分区 `p0` 的分区权重为 2，语句如下。

       ```shell
       obclient(root@mysql001)[test]> CALL DBMS_BALANCE.SET_BALANCE_WEIGHT(2,'test','tbl1_h','p0');

       ```
 5. 完成后，查看表的分区权重信息。

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

   ```

   查询结果如下：

   ```shell
   +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
   | TABLE_ID | PARTITION_ID | SUBPARTITION_ID | WEIGHT | DATABASE_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | TABLEGROUP_NAME | DATABASE_ID | TABLEGROUP_ID | OBJECT_ID |
   +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
   |   500002 |         NULL |            NULL |      1 | test          | tbl1_h     | NULL           | NULL              | NULL            |      500001 |          NULL |    500002 |
   |   500002 |       500003 |            NULL |      2 | test          | tbl1_h     | p0             | NULL              | NULL            |      500001 |          NULL |    500003 |
   +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
   2 rows in set

   ```

## Oracle 模式下设置分区权重

1. 用户登录集群的 Oracle 租户。

   ```shell
   obclient -h10.xx.xx.xx -P2883 -usys@oracle001#obdemo -p***** -A

   ```shell
   obclient(SYS@oracle001)[SYS]> CREATE TABLE TBL1_H(col1 INT,col2 VARCHAR(50)) PARTITION BY HASH(col1) PARTITIONS 5;

   ```shell
   obclient(SYS@oracle001)[SYS]> SELECT TABLE_NAME, PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'TBL1_H';

   ```

   查询结果如下：

   ```shell
   +------------+----------------+
   | TABLE_NAME | PARTITION_NAME |
   +------------+----------------+
   | TBL1_H     | P4             |
   | TBL1_H     | P3             |
   | TBL1_H     | P2             |
   | TBL1_H     | P1             |
   | TBL1_H     | P0             |
   +------------+----------------+
   5 rows in set

      - 设置表级权重

       ```shell
       obclient(SYS@oracle001)[SYS]> delimiter //

       ```

       ```shell
       obclient(SYS@oracle001)[SYS]> BEGIN
                  DBMS_BALANCE.SET_BALANCE_WEIGHT(1,'SYS','TBL1_H');
                  END;//

       ```

       ```shell
       obclient(SYS@oracle001)[SYS]> delimiter ;

       设置表 `TBL1_H` 的一级分区 `P0` 分区权重为 2，语句如下。

       ```

       ```shell
       obclient(SYS@oracle001)[SYS]> BEGIN
                  DBMS_BALANCE.SET_BALANCE_WEIGHT(2,'SYS','TBL1_H','P0');
                  END;//

       ```

   ```shell
   obclient(SYS@oracle001)[SYS]> SELECT * FROM SYS.DBA_OB_OBJECT_BALANCE_WEIGHT;

   ```

   查询结果如下：

   ```shell
   +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
   | TABLE_ID | PARTITION_ID | SUBPARTITION_ID | WEIGHT | DATABASE_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | TABLEGROUP_NAME | DATABASE_ID | TABLEGROUP_ID | OBJECT_ID |
   +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
   |   500002 |         NULL |            NULL |      1 | SYS           | TBL1_H     | NULL           | NULL              | NULL            |      201006 |          NULL |    500002 |
   |   500002 |       500003 |            NULL |      2 | SYS           | TBL1_H     | P0             | NULL              | NULL            |      201006 |          NULL |    500003 |
   +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+
   2 rows in set

   ```

## 后续操作

设置分区权重后，如果需要期望进行分区权重均衡，可以调用 `DBMS_BALANCE.TRIGGER_PARTITION_BALANCE` 子程序，手动触发一次分区均衡，有关手动触发分区均衡的详细操作，参见[手动触发分区均衡](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682441)。

或者，也可以等待定时分区均衡任务的触发。有关定时分区均衡任务的相关信息，参见 [配置定时分区均衡任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005682444)。

## 相关文档

有关分区权重的应用案例，参见 [租户内均衡](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685946) 中的 **分区权重均衡的应用**。

 上一篇 下一篇 ![有帮助](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) 咨询热线
