---
title: "租户预扩容 - OceanBase 数据库 V4.2.5 | OceanBase 文档中心"
description: 租户预扩容 为了进一步实现租户的平滑扩缩容，OceanBase 数据库实现了预扩容功能。该功能是通过配置租户从缩容到扩容所需的扩容系数（ls_scale_out_factor），提前产生足够多的日志流，使日志流的状态和位置与扩容后均能匹配的情况下，再开始租户的扩容或缩容操作，从而达到平滑扩缩容的目的。 背景信息 在 …
---
切换语言

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

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

# 租户预扩容

更新时间：2026-04-15 17:16:58

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.5/zh-CN/600.manage/200.tenant-management/600.common-tenant-operations/800.tenant-scale-in-and-out/170.pre-scaling-for-a-tenant.md)  

为了进一步实现租户的平滑扩缩容，OceanBase 数据库实现了预扩容功能。该功能是通过配置租户从缩容到扩容所需的扩容系数（ls_scale_out_factor），提前产生足够多的日志流，使日志流的状态和位置与扩容后均能匹配的情况下，再开始租户的扩容或缩容操作，从而达到平滑扩缩容的目的。

## 背景信息

在 V4.x 之前版本中，OceanBase 数据库仅支持租户的同构 Zone 模式，同构 Zone 模式下，租户下各 Zone 的 `UNIT_NUM` 必须相同。在 V4.2.5 版本中，OceanBase 数据库从 V4.2.5 BP5 版本开始，支持租户的异构 Zone 模式。异构 Zone 模式下，租户下各 Zone 的 `UNIT_NUM` 可以相同也可以不同，但一个租户的所有 Zone 最多只能有两种 `UNIT_NUM`。

本文主要以同构 Zone 模式的租户为例，提供租户预扩容的操作指导。对于异构 Zone 模式的租户，建议使用异构 Zone 的运维方式来实现平滑扩缩容。通过异构 Zone 实现平滑扩缩容的使用案例，参见 [平滑扩缩容应用案例](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003545877)。

## 使用限制

对于 V4.2.5 版本，从 V4.2.5 BP1 版本开始支持预扩容功能。

## 扩容系数介绍

在之前的版本中，一个租户在一个节点上有且仅有一个日志流提供服务，如果一个节点内有足够多的日志流提供服务，就可以在扩容时直接触发日志流位置的重分布，而不需要再通过 Transfer 来分裂日志流。

为了定义扩容前已经有足够多的日志流，OceanBase 数据库引入了扩容系数（ls_scale_out_factor）的概念。扩容系数定义的是，为了达到后续的扩容需求，一个日志流所需拆分出的日志流个数。

### 扩容系数的计算公式

在 OceanBase 数据库中，对于同构 Zone 模式的租户，各 Unit Group 上租户的正常日志流个数（不含系统日志流和广播日志流）为：`租户 UNIT_NUM 的个数（U）* 租户 PRIAMRY_ZONE 第一优先级的个数（P）`。

假设在扩容前，租户的 `UNIT_NUM` 个数为 U1，租户的 `PRIAMRY_ZONE` 第一优先级的个数为 P1；扩容后，租户的 `UNIT_NUM` 个数为 U2，租户的 `PRIAMRY_ZONE` 第一优先级的个数为 P2。则扩容系数（ls_scale_out_factor）的计算公式如下：

`ls_scale_out_factor = LCM（U1 * p1 , U2 * P2 ）/ (U1 * P1)`

即,`(U1 * p1)`与 `(U2 * P2)` 这两个值的最小公倍数再除以 `(U1 * P1)`，就能得到该租户的扩容系数。

## 预扩容

假设当前有一同构 Zone 模式下的租户 `mq_t1`，其 Locality 为 `F@zone1, F@zone2, F@zone3`，每个 Zone 上有 1 个 Unit，`PRIMARY_ZONE` 打散在 `zone1` 和 `zone2`上，后续期望将租户的 `UNIT_NUM` 调整为 2，且租户的 `PRIMARY_ZONE` 第一优先级的个数不变，则对该租户进行预扩容的操作如下。

1. 使用 `root` 用户登录到集群的 sys 租户。

   连接示例如下：

   ```shell
   obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A

   ```
 2. 查看租户 `mq_t1` 的 `TENANT_ID`、`UNIT_NUM` 以及 `PRIAMRY_ZONE` 等信息。

   ```shell
   obclient> SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';

   ```

   查询结果如下：

   ```shell
   +-----------+-------------+-------------+----------------------------+----------------------------+---------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+-------------------------+------------+-----------+
   | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME                | MODIFY_TIME                | PRIMARY_ZONE        | LOCALITY                                    | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN            | REPLAYABLE_SCN      | READABLE_SCN        | RECOVERY_UNTIL_SCN  | LOG_MODE     | ARBITRATION_SERVICE_STATUS | UNIT_NUM | ZONE_UNIT_NUM_LIST      | COMPATIBLE | MAX_LS_ID |
   +-----------+-------------+-------------+----------------------------+----------------------------+---------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+-------------------------+------------+-----------+
   |      1002 | mq_t1       | USER        | 2024-11-22 15:35:13.392880 | 2024-11-22 15:35:31.923530 | zone1,zone2;zone3   | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL              | MYSQL              | NORMAL | NO            | NO     | PRIMARY     | NORMAL            |                0 | 1732261018646683000 | 1732261018646683000 | 1732261018646683000 | 4611686018427387903 | NOARCHIVELOG | DISABLED                   |        1 | zone1:1,zone2:1,zone3:1 | 4.2.5.5    |      1002 |
   +-----------+-------------+-------------+----------------------------+----------------------------+---------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+-------------------------+-----------+-----------+
   1 row in set

   ```
 3. 计算扩容系数 ls_scale_out_factor 的值，并配置租户的扩容系数。

   在本示例中，租户 `mq_t1` 扩容前的 `UNIT_NUM` 个数为 1，`PRIAMRY_ZONE` 第一优先级的个数为 2；扩容后，租户的 `UNIT_NUM` 个数 2，`PRIMARY_ZONE` 第一优先级的个数不变仍为 2，根据扩容系数的计算公式，其扩容系数为 `LCM（2 * 1 , 2 * 2）/(2 * 1) = 2`。

   根据计算出的扩容系数，设置配置项 [ls_scale_out_factor](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001809543) 的值。

   ```shell
   obclient> ALTER SYSTEM SET ls_scale_out_factor = 2 TENANT = mq_t1;

   ```
 4. 将租户级配置项 [enable_rebalance](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001502063) 和 [enable_transfer](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001502034) 的值均设置为开启状态（`True`），以便让租户下可以产生足够多的日志流。

   ```shell
   obclient> ALTER SYSTEM SET enable_rebalance = True TENANT = mq_t1;

   ```

   ```shell
   obclient> ALTER SYSTEM SET enable_transfer = True TENANT = mq_t1;

   ```
 5. 等待租户产生足够多的日志流后，查询当前租户下 `NORMAL` 状态的日志流个数是否符合预期。

   根据扩容系数的公式，扩容后当前租户下 `NORMAL` 状态（不含系统日志流和广播日志流）的日志流个数应该为：扩容前租户的 `UNIT_NUM` 数（U1）* 扩容前租户的 `PRIAMRY_ZONE` 第一优先级的个数（P1）* 扩容系数（ls_scale_out_factor），即当前租户下日志流个数应为 `1 * 2 * 2 = 4`。

   ```shell
   obclient> SELECT TENANT_ID, STATUS, COUNT(*) FROM oceanbase.CDB_OB_LS WHERE TENANT_ID = 1002 AND FLAG = '' AND LS_ID != 1 GROUP BY STATUS;

   ```

   查询结果的示例如下：

   ```shell
   +-----------+--------+----------+
   | TENANT_ID | STATUS | COUNT(*) |
   +-----------+--------+----------+
   |      1002 | NORMAL |        4 |
   +-----------+--------+----------+
   1 row in set

   ```
 6. 确认待扩容的租户下不再有负载均衡任务。

   ```shell
   obclient> SELECT * FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE TENANT_ID = 1002;

   ```

   如果查询结果为空，则表示本次预扩容操作完成。

## 后续操作

完成预扩容操作后，用户可以根据业务需要，按照预期的扩容方案进行扩缩容操作：

- [通过调整 Unit Number 实现租户扩缩容](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001500298)
 - [通过调整 Primary Zone 实现租户扩缩容](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001500299)

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