---
title: "租户的资源管理 | OceanBase 文档中心"
description: 租户的资源管理 OceanBase 数据库是多租户的数据库系统，一个集群内可包含多个相互独立的租户，每个租户提供独立的数据库服务。在 OceanBase 数据库中，使用资源配置（unit_config）、资源池（Resource Pool）和资源单元（Unit）等三个概念，对各租户的可用资源进行管理。 租户资源的创建…
---
切换语言

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

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

# 租户的资源管理

更新时间：2026-06-11 16:37:46

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.0.0/zh-CN/700.reference/100.oceanbase-database-concepts/300.multi-tenant-architecture-1/500.tenants-and-resource-management-1/100.tenant-resource-management.md)  

OceanBase 数据库是多租户的数据库系统，一个集群内可包含多个相互独立的租户，每个租户提供独立的数据库服务。在 OceanBase 数据库中，使用资源配置（unit_config）、资源池（Resource Pool）和资源单元（Unit）等三个概念，对各租户的可用资源进行管理。

## 租户资源的创建

创建租户前，需首先确定租户的资源配置、使用资源范围等。租户创建的通用流程如下：

- 创建资源配置
 - 创建资源池
 - 创建租户

### 创建资源配置

资源配置是描述资源池的配置信息，用来描述资源池中每个资源单元可用的 CPU、内存、存储空间和 IOPS 等的规格。修改资源配置可动态调整资源单元的规格。这里需要注意，资源配置指定的是对应资源单元能够提供的服务能力，而不是资源单元的实时负载。 创建资源配置的示例语句如下：

```sql
obclient> CREATE RESOURCE UNIT uc1 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '36G', MAX_IOPS 128000, MIN_IOPS 128000, LOG_DISK_SIZE '2T' ;

```

`CREATE RESOURCE UNIT` 语句中的必选参数包括：

- `MAX_CPU`
 - `MEMORY_SIZE`

对于可选参数 `MIN_CPU`、`MAX_IOPS`、`MIN_IOPS` 和 `LOG_DISK_SIZE`：

- `MIN_CPU` 默认等于 `MAX_CPU`
 - `MIN_IOPS` 默认等于 `MAX_IOPS`
 - `LOG_DISK_SIZE` 默认等于 3 倍的内存大小，最小为 2G。
 - `MAX_IOPS` 和 `MIN_IOPS` 的最小值为 1024，并且要求 `MAX_IOPS >= MIN_IOPS`。
 - 如果未指定 `MIN_IOPS` 和 `MAX_IOPS` 的值：

     - `MIN_IOPS` 和 `MAX_IOPS` 的值根据 `MIN_CPU` 规格自动计算，1个 Core 对应 1 万 IOPS 值，即 `MAX_IOPS = MIN_IOPS = MIN_CPU * 10000`。
     - 如果用户未指定 `IOPS_WEIGHT`，则 `IOPS_WEIGHT = MIN_CPU`；如果用户指定了 `IOPS_WEIGHT`，则 `IOPS_WEIGHT` 以用户指定的值为准。
 - 如果仅指定了 `MAX_IOPS` 的值：

     - `MIN_IOPS` 取 `MAX_IOPS` 的值；反之亦然。
     - 如果用户未指定 `IOPS_WEIGHT` 的值，则默认为 `0`。

`MIN_CPU` 表示使用该资源配置的资源单元能够提供的 CPU 的下限。

### Meta 租户的资源配置

Meta 租户没有独立的 Unit，租户资源管理过程中不管理 Meta 租户。系统在创建租户时默认为 Meta 租户预留资源，各项资源从用户租户的资源中扣除。目前 Meta 租户的各项资源采用默认配置，不支持用户指定，包括：CPU、MEMORY、IOPS 以及 LOG_DISK_SIZE。

其中：

- CPU 资源：Meta 租户和用户租户共享 CPU 资源，不做隔离。考虑到公有云最小 1c2G 的售卖模式，CPU 规格最小为 1c。在 `GV$OB_UNITS` 视图中展示的 Meta 租户的 CPU 资源规格为 `NULL`，表示与用户租户共享 CPU 资源。
 - MEMORY 资源：内存资源不支持共享，Meta 租户和用户租户的内存资源需要隔离。默认 Meta 租户占整体租户规格的 10%。为了保证 Meta 租户正常运行，Meta 租户内存资源规格最小为 512M，不设最大值。整体租户内存规格减去 Meta 租户内存规格即为用户租户的内存规格。整体租户规格最小值调整为 1G。下面举例说明：

     1. 租户规格大于等于 10G 时，Meta 租户和用户租户内存规格比例为 1:9
     2. 租户规格大于等于 2G 时，Meta 租户的内存规格固定为 1G，剩余资源给用户租户
     3. 租户规格小于 2G 时，Meta 租户固定分配 512M，剩余资源给用户租户
     4. 租户规格最小 1G，Meta 租户占用 512M，用户租户占用 512M
 - 日志盘资源：日志盘资源规格用户可以不指定，默认值为内存资源的3倍大小，最小值为 2G。日志盘资源和内存资源一样，不支持共享，Meta 租户和用户租户的日志盘资源需要隔离。默认，Meta 租户占整体租户规格的 10%。为了保证 Meta 租户正常运行，Meta 租户的日志盘资源规格最小为 512M。
 - IOPS资源：Meta 租户和用户租户共享 IOPS 资源，不做隔离。在 `GV$OB_UNITS` 视图中展示的 Meta 租户的 IOPS 资源规格会为 `NULL`，表示与用户租户共享 IOPS 资源。

用户租户和 Meta 租户的资源规格取值如下表所示。

| 资源参数 | 租户规格 | 用户租户 | Meta租户 |
| --- | --- | --- | --- |
| MIN_CPU / MAX_CPU | 最小 1C | 共享 CPU 资源规格 | 共享 CPU 资源规格 |
| MEMORY_SIZE | 最小 1G | 最小 512M | 租户规格的 10%：   - 租户规格大于等于 2G 时，Meta 租户最小 1G - 租户规格小于 2G 时，Meta 租户占用 512M |
| LOG_DISK_SIZE | 最小 2G | 最小 1.5G | 租户规格的 10%，最小 512M |
| MAX_IOPS / MIN_IOPS | 最小 1024 | 共享 IOPS 资源规格 | 共享 IOPS 资源规格 |

### 创建资源池

资源池由若干个资源单元组成，通过给资源池指定资源配置，可指定资源池下各资源单元的物理资源。创建资源池的示例语句如下：

```sql
obclient> CREATE RESOURCE POOL rp1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('zone1', 'zone2');

```

在该示例语句中，创建了一个资源池 `rp1`，该资源池有三个要素，三个要素缺一不可：

- `UNIT 'uc1'` 表示为该资源池指定的资源配置为 `uc1`，该资源池下的每个资源单元使用 `uc1` 的规格进行配置。
 - `ZONE_LIST ('zone1','zone2')` 是为资源池指定的使用范围，表示该资源池要在 `zone1` 和 `zone2` 上创建资源单元。
 - `UNIT_NUM 2` 是为资源池指定资源单元的个数，表示在 `ZONE_LIST` 内的每个 Zone 上都创建 2 个资源单元。

任何一个资源单元一定需要放置在资源足够容纳下它的物理机上，并且单台物理机上最多能放置同一个资源池下的一个资源单元，如果 `zone1` 或 `zone2` 上的物理机个数小于 2，或物理机的资源小于 `uc1` 的规格，上述创建资源池的示例语句将无法执行成功，资源池最终会创建失败。

### 创建租户

创建好资源池后，可以继续创建租户，一个资源池仅能属于一个租户，一个租户可拥有一个或多个资源池，租户在同一个 Zone 上仅能有一个资源池，即属于同一个租户的多个资源池的 `ZONE_LIST` 彼此不允许有交集。一个租户的所有资源池下的全部资源单元的集合描述了该租户可以使用的全部物理机资源。

创建租户的示例语句如下：

```sql
obclient> CREATE RESOURCE POOL pool1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('z1', 'z2');
obclient>CREATE RESOURCE POOL pool2 UNIT 'uc1', UNIT_NUM 1, ZONE_LIST ('z3');
obclient>CREATE TENANT tt resource_pool_list=('pool1','pool2');

```

示例语句中首先创建了两个资源池 `pool1` 和 `pool2`，并在此基础上创建了租户 `tt`，租户 `tt` 在 `z1`、`z2` 上各有 2 个资源单元，在 `z3` 上有 1 个资源单元，各资源单元的规格均使用 `uc1` 指定的资源配置。

#### 注意

属于同一个租户的多个资源池的 `ZONE_LIST` 彼此不允许有交集。

## 租户资源的变更

租户的资源变更通过调整租户下各资源的三要素即可完成，具体表现为，可以分别单独调整资源池的 Unit 配置、`ZONE_LIST` 和 `UNIT_NUM` 来进行租户资源的变更。除此之外，还支持对资源池进行 Split 或 Merge 两个特殊的变更操作。

### 修改资源配置

修改资源池的资源配置即直接调整资源配置的 CPU 或 Memory 等的值，进而直接影响租户在该资源池上的资源规格和服务能力。 修改资源池的资源配置的示例语句如下：

```sql
obclient> CREATE RESOURCE UNIT uc1 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '32G', MMAX_IOPS 128000, MIN_IOPS 128000, LOG_DISK_SIZE '2T';

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

obclient> CREATE RESOURCE POOL pool2 UNIT 'uc1', UNIT_NUM 1, ZONE_LIST ('z3');

obclient> CREATE TENANT tt resource_pool_list=('pool1','pool2');

obclient> ALTER RESOURCE UNIT uc1 MAX_CPU 6,  MEMORY_SIZE '36G';

```

示例中，资源池 `pool1` 和 `pool2` 的资源配置是 `uc1`，语句 `ALTER RESOURCE UNIT uc1 MAX_CPU 6, MEMORY_SIZE '36G';` 将资源配置 `uc1` 的 `MAX_CPU` 调整为 `6`；`MEMORY_SIZE` 调整为 `36G`，其他配置选项不变。通过调整资源配置的各个选项，可调整租户的资源池在对应 Zone 上的资源规格，进而影响租户的服务能力。

### 切换资源配置

切换资源池的资源配置可以调整资源池下每个资源单元的资源规格，进而调整租户在该资源池上的资源规格和服务能力。

切换资源池的资源配置的示例语句如下：

```sql
obclient> ALTER RESOURCE POOL rp1 UNIT 'uc2';

```

假设资源池 `rp1` 之前的资源配置为 `uc1`，则示例语句将 `rp1` 的资源配置从 `uc1` 变更为 `uc2`。理论上 OceanBase 数据库支持对资源规格 `MIN_CPU`、`MAX_CPU` 以及 `MEMORY_SIZE` 同时修改。但通常情况下，修改资源配置和切换资源配置都能对租户的服务能力进行调整。对应到租户层面，实际上是调整了租户资源单元的规格。对资源规格的修改通常有以下两种场景：

- 调大资源规格

  调大资源规格主要用在租户的资源扩容场景中，可分别对 CPU 和 Memory 进行资源扩容。

  示例 1：

  ```sql
  obclient> CREATE RESOURCE UNIT u_c0 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '36G', MAX_IOPS 128000, MIN_IOPS 128000, LOG_DISK_SIZE '2T';

  obclient> CREATE RESOURCE POOL pool1 unit='u_c0', unit_num=3, zone_list=('z1','z2','z3');

  obclient> ALTER RESOURCE UNIT u_c0 MAX_CPU 10, MIN_CPU 8, MEMORY_SIZE '72G';

  ```

  上述示例 1 中创建了一个资源配置 `u_c0`，并创建了一个资源池 `pool1`，`pool1` 使用 `u_c0` 作为自己的资源配置，之后调大 `u_c0` 的 `MIN_CPU`、`MAX_CPU` 或 `MMEMORY_SIZE`。该调整旨在调大资源池 `pool1` 的资源规格，目的是提高相应租户的服务能力。

  示例 2:

  ```sql
  obclient> CREATE RESOURCE UNIT u_c0 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '36G', MMAX_IOPS 128000, MIN_IOPS 128000, LOG_DISK_SIZE '2T';

  obclient> CREATE RESOURCE UNIT u_c1 MAX_CPU 10, MIN_CPU 8, MEMORY_SIZE '72G', MMAX_IOPS 128000, MIN_IOPS 128000, LOG_DISK_SIZE '2T';

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

  ```

  上述示例 2 中创建了两个资源配置 `u_c0` 和 `u_c1`。并创建了一个资源池 `pool1`，`pool1` 最初使用 `u_c0` 作为自己的资源配置，之后调整为资源配置 `u_c1`。该调整旨在调大资源池 `pool1` 的资源规格，目的是提高相应租户的服务能力。
 - 调小资源规格

  根据调大资源规格的示例，系统还支持调小资源规格，方法与调大资源规格的方法相同。

### 未被分配的资源池的 UNIT_NUM 变更

调整资源池的 `UNIT_NUM` 可以调整资源池下每个 Zone 内资源单元的数量，进而通过调整资源单元的数量来提高或降低该租户在对应 Zone 上的服务能力。

调整资源池的 `UNIT_NUM` 的示例语句如下：

obclient> ALTER RESOURCE POOL rp1 UNIT_NUM 3; // 调大unit num

obclient> ALTER RESOURCE POOL rp1 UNIT_NUM 2; // 调小unit num

obclient> ALTER RESOURCE POOL rp1 UNIT_NUM 1 DELETE UNIT = (1001, 1003); // 指定资源单元调小unit num

```

变更 `UNIT_NUM` 也分为两类，即调大 `UNIT_NUM` 和调小 `UNIT_NUM`。其中，`ALTER RESOURCE POOL rp1 UNIT_NUM 3;` 是调大 `UNIT_NUM`；`ALTER RESOURCE POOL rp1 UNIT_NUM 2;` 和 `ALTER RESOURCE POOL rp1 UNIT_NUM 1 DELETE UNIT = (1001, 1003);` 为调小 `UNIT_NUM`。

### 租户资源池的 UNIT_NUM 变更

资源池在赋予租户后也可以进行 UNIT_NUM 的变更，但是只能增加，不能减少。资源池变更要以租户为单位，所有资源池都增加才可以成功。调整租户资源池的 UNIT_NUM 的示例语句如下：

```sql
obclient> CREATE RESOURCE POOL pool1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('zone1', 'zone2');

obclient> CREATE RESOURCE POOL pool2 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('zone3');

obclient> ALTER RESOURCE TENANT tt UNIT_NUM = 3;//调大unit num

```

### 变更 ZONE_LIST

调整资源池的 `ZONE_LIST` 可以调整资源池在 Zone 维度的使用范围，从而调整租户数据在 Zone 维度的服务范围。

调整资源池的 `ZONE_LIST` 的示例语句如下：

```sql
obclient> CREATE RESOURCE POOL pool1 UNIT_NUM=3, UNIT='unit_config', ZONE_LIST=('z1','z2','z3');

obclient> CREATE RESOURCE POOL pool2 UNIT_NUM=3, UNIT='unit_config', ZONE_LIST=('z1','z2','z3');

obclient> ALTER RESOURCE POOL pool1 ZONE_LIST=('z1','z2','z3','z4');

obclient> ALTER RESOURCE POOL pool2 ZONE_LIST=('z1','z2');

```

变更 `ZONE_LIST` 也分为两类，即扩大 Zone 维度的使用范围和缩小 Zone 维度的使用范围。其中，`ALTER RESOURCE POOL pool1 ZONE_LIST=('z1','z2','z3','z4');` 是扩大 Zone 维度的使用范围；`ALTER RESOURCE POOL pool2 ZONE_LIST=('z1','z2');` 是缩小 Zone 维度的使用范围。

### 分裂资源池

分裂资源池操作可将一个资源池分裂为多个资源池，分裂资源池操作的基本语法和示例如下：

```sql
obclient> CREATE RESOURCE POOL pool1 UNIT='uc0', UNIT_NUM=1, ZONE_LIST=('z1','z2','z3');

obclient> ALTER RESOURCE POOL pool1 SPLIT INTO ('pool10','pool11','pool12') ON ('z1','z2','z3');

obclient> ALTER RESOURCE POOL pool10 UNIT='uc1';

obclient> ALTER RESOURCE POOL pool11 UNIT='uc2';

obclient> ALTER RESOURCE POOL pool12 UNIT='uc3';

```

### 合并资源池

合并资源池操作可将多个资源池合并为一个资源池，合并资源池的基本语法和示例如下：

```sql
obclient> CREATE RESOURCE POOL pool1 UNIT='uc0', UNIT_NUM=1, ZONE_LIST=('z1');

obclient> CREATE RESOURCE POOL pool2 UNIT='uc0', UNIT_NUM=1, ZONE_LIST=('z2');

obclient> CREATE RESOURCE POOL pool3 UNIT='uc0', UNIT_NUM=1, ZONE_LIST=('z3');

obclient> ALTER RESOURCE POOL MERGE ('pool1','pool2','pool3') INTO ('pool0');

```

> **说明**
>
>  
>
> 合并资源池时，不会影响资源池被租户使用，仅在 RootService 的管理层看来是多个资源池合并为一个资源池，方便统一维护。

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