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

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

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

# 租户预扩容

更新时间：2026-06-17 11:27:22

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/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`），提前产生足够多的日志流，使日志流的状态和位置与扩容后均能匹配的情况下，再开始租户的扩容或缩容操作，从而达到平滑扩缩容的目的。

## 背景信息

在当前版本中，OceanBase 数据库支持租户的同构 Zone 模式和异构 Zone 模式：

- 同构 Zone 模式下，要求租户下各 Zone 的 `UNIT_NUM` 必须相同。
 - 异构 Zone 模式下，租户下各 Zone 的 `UNIT_NUM` 可以相同也可以不同，但一个租户的所有 Zone 最多只能有两种 `UNIT_NUM`。

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

## 扩容系数介绍

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

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

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

在 OceanBase 数据库中，租户的正常日志流个数（不含系统日志流和广播日志流）为：`租户 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)`，就能得到该租户的扩容系数。

## 预扩容

假设当前有一租户 `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(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, PRIMARY_ZONE, LOCALITY, UNIT_NUM FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';

   ```

   查询结果如下：

   ```shell
   +-----------+-------------+-------------+-------------------+---------------------------------------------+----------+
   | TENANT_ID | TENANT_NAME | TENANT_TYPE | PRIMARY_ZONE      | LOCALITY                                    | UNIT_NUM |
   +-----------+-------------+-------------+-------------------+---------------------------------------------+----------+
   |      1002 | mq_t1       | USER        | zone1,zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |        1 |
   +-----------+-------------+-------------+-------------------+---------------------------------------------+----------+
   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-1000000005685390) 的值。

   ```shell
   obclient(root@sys)[oceanbase]> ALTER SYSTEM SET ls_scale_out_factor = 2 TENANT = mq_t1;

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

   ```shell
   obclient(root@sys)[oceanbase]> ALTER SYSTEM SET enable_rebalance = True TENANT = mq_t1;

   ```

   ```shell
   obclient(root@sys)[oceanbase]> 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(root@sys)[oceanbase]> 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(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE TENANT_ID = 1002;

   ```

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

## 后续操作

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

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

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