---
title: "通过修改 unit_config 实现租户扩缩容 | OceanBase 文档中心"
description: 通过修改 unit_config 实现租户扩缩容 对租户内资源的扩容和缩容可以通过修改 unit_config 即租户的资源单元配置来实现。 前提条件 在进行租户的扩容和缩容操作前，需要进行以下操作： 由于空闲的资源池会被计算为占用的资源，故在扩容前，如果有租户被删除，建议与租户对应的资源池也一并删除，以便释放资源。…
---
切换语言

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

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

# 通过修改 unit_config 实现租户扩缩容

更新时间：2026-06-03 10:57:22

对租户内资源的扩容和缩容可以通过修改 unit_config 即租户的资源单元配置来实现。

## 前提条件

在进行租户的扩容和缩容操作前，需要进行以下操作：

- 由于空闲的资源池会被计算为占用的资源，故在扩容前，如果有租户被删除，建议与租户对应的资源池也一并删除，以便释放资源。

  删除资源池的相关操作请参见 [删除资源池](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000886141)。
 - 进行租户缩容前，建议进行一轮转储以便释放租户正在使用的内存。

  手动触发转储的相关操作请参见 [手动触发转储](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000886124)。
 - 查看集群中资源的分配情况，了解集群中资源的使用情况。

  查看集群节点的资源总量和分配状态的相关操作请参见 [查看集群的资源信息](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000881517)。

## 通过 SQL 语句修改租户的资源单元配置

在通过调大和调小租户资源单元的配置进行扩容和缩容时，有以下两种场景：

- 当前租户配置了独立的资源单元配置，可以直接修改租户的资源单元配置。
 - 多个租户使用了相同的资源单元配置，需要切换租户的资源单元配置。

确认租户是否使用了独立的资源单元配置的操作如下：

1. 使用 `root` 用户登录数据库的 `sys` 租户。
 2. 执行以下语句，获取待操作的租户所属的资源配置 ID。

   ```sql
   obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID  FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID;
   +-------------+----------------+
   | TENANT_NAME | UNIT_CONFIG_ID |
   +-------------+----------------+
   | sys         |              1 |
   | MySQL       |           1002 |
   | Oracle      |           1004 |
   +-------------+----------------+
   3 rows in set

   ```

根据查询结果，如果当前租户对应的 `UNIT_CONFIG_ID` 与其他租户相同，则表示有多个租户使用了相同的资源单元配置；如果当前租户中对应的 `UNIT_CONFIG_ID` 与其他租户均不相同，则表示该租户使用了独立的资源单元配置。

以下将通过这两种场景提供租户扩容和缩容的操作指导。

### 注意事项

在调大资源规格时，无论是通过修改资源配置还是切换资源配置，调整后的资源总量都必须满足以下要求：

```javascript
Sum(min_cpu) <= CPU_CAPACITY;
Sum(max_cpu) <= CPU_CAPACITY * resource_hard_limit;
Sum(memory_size) <= MEM_CAPACITY;
Sum(log_disk_size) <= LOG_DISK_CAPACITY;

```

否则，系统会报错，提示扩容失败。

其中：

- `CPU_CAPACITY`：表示 CPU 总的容量。
 - `MEM_CAPACITY`：表示内存总的容量。
 - `LOG_DISK_CAPACITY`：表示日志盘总的容量。
 - `resource_hard_limit`：是一个配置项的值。

  在分配 Unit 时，系统会根据配置项 `resource_hard_limit` 的值来分配 CPU 资源。该配置项的默认值为 `100`，表示不允许超卖，取值范围为 [100, 10000]。

  更多配置项 `resource_hard_limit` 的说明信息请参见 [resource_hard_limit](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000884918)。

### 背景信息

假设当前集群中共包含 3 个可用区 `z1`、`z2`、`z3`，每个 Zone 内包含 3 台 OBServer。集群中有一个普通租户 `tenant1`，其资源分配情况如下：

```sql
obclient> CREATE RESOURCE UNIT unit1 MAX_CPU 6, MIN_CPU 6, MEMORY_SIZE '36G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT=0, LOG_DISK_SIZE = '2G';

obclient> CREATE RESOURCE POOL pool1 UNIT 'unit1', UNIT_NUM 2, ZONE_LIST ('z1','z2','z3');

obclient>CREATE TENANT tenant1 resource_pool_list=('pool1');

```

### 租户配置了独立的资源单元配置的场景

如果待操作的租户配置了独立的资源单元配置，您可以直接通过修改租户的 unit_config 来完成租户的扩容和缩容。

方法如下：

1. 使用 `root` 用户登录数据库的 `sys` 租户。
 2. 进入 `oceanbase` 数据库。

   ```sql
   obclient>USE oceanbase;

   ```
 3. 执行以下语句，获取待操作的租户所使用的资源配置 ID。

   ```sql
   obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID  FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID;
   +-------------+----------------+
   | TENANT_NAME | UNIT_CONFIG_ID |
   +-------------+----------------+
   | sys         |              1 |
   | MySQL       |           1001 |
   | Oracle      |           1002 |
   +-------------+----------------+
   3 rows in set

   ```
 4. 执行以下语句，获取待操作租户的资源配置详细信息。

   ```sql
   obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1001';
   +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+
   | UNIT_CONFIG_ID | NAME  | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
   +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+
   |           1001 | unit1 |       6 |       6 | 38654705664 |    2147483648 |     1024 |     1024 |           0 |
   +----------------+-------+---------+---------+-------------+---------------+----------+----------+-------------+
   1 row in set

   ```
 5. 根据获取的资源单元配置信息，修改 `unit1` 的配置。

      - 调大 unit1 的配置

       ```sql
       obclient> ALTER RESOURCE UNIT unit1 MAX_CPU 8, MIN_CPU 8, MEMORY_SIZE '40G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';

       ```
      - 调小 `unit1` 的配置

       ```sql
       obclient> ALTER RESOURCE UNIT unit1 MAX_CPU 5, MIN_CPU 5, MEMORY_SIZE '5G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';

       ```

### 多个租户使用了相同的资源单元配置的场景

如果多个租户共用了同一个资源单元配置模版，则不能通过简单的调大资源单元配置来实现租户的扩容和缩容。因为一旦修改，将导致使用相同资源单元配置模版的所有租户同时进行了扩容或缩容。

此场景下，需要先创建独立的资源单元配置后，再为租户切换资源单元配置。

例如，待扩容或缩容的租户为 `tenant1`，但由于 `tenant1`、`tenant2` 均使用了 `unit1` 作为资源单元配置，因此需要创建一个新的资源单元。

1. 使用 `root` 用户登录数据库的 `sys` 租户。
 2. 进入 `oceanbase` 数据库。
 3. 创建一个独立的资源单元配置。

   其中，`unit2`为新建的资源单元的名称，名称需要保证全局唯一。

      - 创建比当前资源单元配置高的 `unit2`

       ```sql
       obclient> CREATE RESOURCE UNIT unit2 MAX_CPU 8, MIN_CPU 8, MEMORY_SIZE '20G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';

       ```
      - 创建比当前资源单元配置低的 `unit3`

       ```sql
       obclient> CREATE RESOURCE UNIT unit3 MAX_CPU 5, MIN_CPU 5, MEMORY_SIZE '5G', MAX_IOPS 1024, MIN_IOPS 1024, IOPS_WEIGHT 0, LOG_DISK_SIZE '2G';

       ```
 4. 修改租户的资源池，将资源池的资源单元配置替换为刚刚新创建的 Unit。

   其中，`unit2` 和 `unit3` 为刚刚新创建的 Unit。

   ```sql
   obclient> ALTER RESOURCE POOL pool1 unit='unit2';

   obclient> ALTER RESOURCE POOL pool1 unit='unit3';

   ```

### 后续处理

操作结束后，您可以通过 `oceanbase.DBA_OB_UNIT_CONFIGS` 视图，确认当前租户的 unit_config 是否修改成功。

```sql
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;

```

更多 `DBA_OB_UNIT_CONFIGS` 视图的字段及说明信息请参见 [DBA_OB_UNIT_CONFIGS](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000885316)。

## 更多信息

在租户的扩容和缩容操作中，您可以借助以下视图来获取租户资源相关的信息：

- oceanbase.DBA_OB_UNIT_CONFIGS

  `DBA_OB_UNIT_CONFIGS` 视图记录了当前集群中的所有 unit_config 信息。

  示例：

  ```sql
  obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;
  +----------------+-----------------+---------+---------+-------------+---------------+----------+----------+-------------+
  | UNIT_CONFIG_ID | NAME            | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT |
  +----------------+-----------------+---------+---------+-------------+---------------+----------+----------+-------------+
  |              1 | sys_unit_config |     2.5 |     2.5 | 17179869184 |   17179869184 |    25000 |    25000 |           2 |
  |           1001 | unit001         |       1 |       1 |  6442450944 |   19327352832 |    10000 |    10000 |           1 |
  |           1002 | unit002         |       1 |       1 |  6442450944 |   19327352832 |    10000 |    10000 |           1 |
  |           1003 | unit003         |       1 |       1 |  6442450944 |   19327352832 |    10000 |    10000 |           1 |
  |           1004 | unit004         |       1 |       1 |  6442450944 |   19327352832 |    10000 |    10000 |           1 |
  |           1005 | unit1           |       6 |       6 | 38654705664 |    2147483648 |     1024 |     1024 |           0 |
  +----------------+-----------------+---------+---------+-------------+---------------+----------+----------+-------------+
  6 rows in set

  ```
 - oceanbase.GV$OB_UNITS

  `GV$OB_UNITS` 视图中记录了集群中所有租户的资源分配情况。

  查询示例如下：

  ```sql
  obclient> SELECT * FROM oceanbase.GV$OB_UNITS\G
  *************************** 1. row ***************************
            SVR_IP: xx.xx.xx.xx
          SVR_PORT: 2882
           UNIT_ID: 1
         TENANT_ID: 1
              ZONE: zone1
           MAX_CPU: 2.5
           MIN_CPU: 2.5
       MEMORY_SIZE: 17179869184
          MAX_IOPS: 25000
          MIN_IOPS: 25000
       IOPS_WEIGHT: 2
     LOG_DISK_SIZE: 17179869184
   LOG_DISK_IN_USE: 191441460
  DATA_DISK_IN_USE: 406847488
            STATUS: NORMAL
       CREATE_TIME: 2022-07-19 11:04:39.226231
  *************************** 2. row ***************************
            SVR_IP: xx.xx.xx.xx
          SVR_PORT: 2882
           UNIT_ID: 1001
         TENANT_ID: 1001
              ZONE: zone1
           MAX_CPU: NULL
           MIN_CPU: NULL
       MEMORY_SIZE: 644245094
          MAX_IOPS: NULL
          MIN_IOPS: NULL
       IOPS_WEIGHT: NULL
     LOG_DISK_SIZE: 1932735283
   LOG_DISK_IN_USE: 155042605
  DATA_DISK_IN_USE: 211812352
            STATUS: NORMAL
       CREATE_TIME: 2022-07-19 13:48:36.308843
  *************************** 3. row ***************************
            SVR_IP: xx.xx.xx.xx
          SVR_PORT: 2882
           UNIT_ID: 1001
         TENANT_ID: 1002
              ZONE: zone1
           MAX_CPU: 1
           MIN_CPU: 1
       MEMORY_SIZE: 5798205850
          MAX_IOPS: 10000
          MIN_IOPS: 10000
       IOPS_WEIGHT: 1
     LOG_DISK_SIZE: 17394617549
   LOG_DISK_IN_USE: 154632504
  DATA_DISK_IN_USE: 121634816
            STATUS: NORMAL
       CREATE_TIME: 2022-07-19 13:48:36.308843
  *************************** 4. row ***************************
            SVR_IP: xx.xx.xx.xx
          SVR_PORT: 2882
           UNIT_ID: 1002
         TENANT_ID: 1005
              ZONE: zone1
           MAX_CPU: NULL
           MIN_CPU: NULL
       MEMORY_SIZE: 644245094
          MAX_IOPS: NULL
          MIN_IOPS: NULL
       IOPS_WEIGHT: NULL
     LOG_DISK_SIZE: 1932735283
   LOG_DISK_IN_USE: 152132563
  DATA_DISK_IN_USE: 211812352
            STATUS: NORMAL
       CREATE_TIME: 2022-07-19 13:51:56.627867
  *************************** 5. row ***************************
            SVR_IP: xx.xx.xx.xx
          SVR_PORT: 2882
           UNIT_ID: 1002
         TENANT_ID: 1006
              ZONE: zone1
           MAX_CPU: 1
           MIN_CPU: 1
       MEMORY_SIZE: 5798205850
          MAX_IOPS: 10000
          MIN_IOPS: 10000
       IOPS_WEIGHT: 1
     LOG_DISK_SIZE: 17394617549
   LOG_DISK_IN_USE: 158023991
  DATA_DISK_IN_USE: 134217728
            STATUS: NORMAL
       CREATE_TIME: 2022-07-19 13:51:56.627867
  5 rows in set

  ```
 - oceanbase.DBA_OB_RESOURCE_POOLS

  `DBA_OB_RESOURCE_POOLS` 视图中记录了当前集群中所有资源池的资源配置情况。其中，`unit_count` 表示资源池中某个资源单元的个数。

  查询示例如下：

  ```sql
  obclient> SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;
  +------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+
  | RESOURCE_POOL_ID | NAME     | TENANT_ID | CREATE_TIME                | MODIFY_TIME                | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE |
  +------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+
  |                1 | sys_pool |         1 | 2022-07-19 11:05:18.168896 | 2022-07-19 11:05:18.175708 |          1 |              1 | zone1     | FULL         |
  |             1001 | pool001  |      1002 | 2022-07-19 13:47:55.854548 | 2022-07-19 13:48:36.307978 |          1 |           1001 | zone1     | FULL         |
  |             1002 | pool002  |      1006 | 2022-07-19 13:49:53.869792 | 2022-07-19 13:51:56.626742 |          1 |           1001 | zone1     | FULL         |
  +------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+
  3 rows in set

  ```

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