---
title: "配置磁盘数据文件的动态扩容 - OceanBase 数据库 V4.3.0 | OceanBase 文档中心"
description: 配置磁盘数据文件的动态扩容 OceanBase 数据库支持根据磁盘数据文件的实际使用情况来进行自动扩容。 背景信息 在 OceanBase 数据库中，存储数据的文件名为 block_file ， block_file 文件位于 /OBServer 节点安装目录/store/sstable 目录下，该文件是在各 OBS…
---
切换语言

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

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

# 配置磁盘数据文件的动态扩容

更新时间：2026-04-10 11:58:35

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.0/zh-CN/700.reference/200.system-management/1000.disk-data-file-management/100.disk-data-file-dynamic-expansion.md)  

OceanBase 数据库支持根据磁盘数据文件的实际使用情况来进行自动扩容。

## 背景信息

在 OceanBase 数据库中，存储数据的文件名为 `block_file`，`block_file` 文件位于 `/OBServer 节点安装目录/store/sstable` 目录下，该文件是在各 OBServer 节点启动后创建。且 `block_file` 文件的大小由配置项 `datafile_size` 或 `datafile_disk_percentage` 控制。更多 OceanBase 数据库数据文件目录的详细介绍请参见 [OBServer 节点安装目录结构](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000640177)。

对于 OceanBase 数据库 V4.2.0 之前的版本，系统主要采用预分配的方式，将一部分磁盘空间预留给数据文件，以保证数据文件占有一段尽可能连续的磁盘空间，避免其他应用程序对磁盘的抢占引起的磁盘资源不足。但这种预分配的方式占用了很大的磁盘空间，即使磁盘空间没有被使用，也不能被释放。

为了解决预分配大块磁盘空间但不能被释放的问题，从 V4.2.0 版本开始，OceanBase 数据库引入了数据文件渐进式使用磁盘空间的用户配置选项，即系统先预分配一个合理的磁盘大小给数据文件，再根据磁盘的实际使用情况和用户的配置进行自动扩容。

## 相关配置项

OceanBase 数据库主要通过以下配置项配合使用来达到磁盘数据文件的自动扩容：

- `datafile_size`：用于设置数据文件占用磁盘可用空间的大小。默认值为 `0M`。有关集群级配置项 `datafile_size` 的详细说明，请参见 [datafile_size](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642119)。
 - `datafile_disk_percentage`：磁盘数据文件占用磁盘总空间的百分比，默认值为 `0`。有关集群级配置项 `datafile_disk_percentage` 的详细说明，请参见 [datafile_disk_percentage](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642195)。
 - `datafile_next`：用于设置磁盘数据文件自动扩容的步长，默认值为 `0M`，表示不启动增长，如果需要开启自动增长，则需要设置为非 0 的值。有关集群级配置项 `datafile_next` 的详细说明，请参见 [datafile_next](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642315)。
 - `datafile_maxsize`：用于设置磁盘数据文件自动扩容的最大空间，默认值为 `0M`，表示不启动自动扩容。有关集群级配置项 `datafile_maxsize` 的详细说明，请参见 [datafile_maxsize](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642241)。

在配置上述配置项时，需要注意如下事项：

- `datafile_size` 与 `datafile_disk_percentage` 均可以用来设置数据文件占用的磁盘空间，您可以选择其中任意一项进行配置。其他情况下：

     - 如果两个配置项均已配置，即 `datafile_size` 与 `datafile_disk_percentage` 同时配置为非 0 的值，则以 `datafile_size` 设置的值为准。
     - 如果两个配置项均未配置，即 `datafile_size` 的值为 `OM` 且 `datafile_disk_percentage` 的值为 `0`，则系统会根据日志和数据是否共用同一磁盘来自动计算数据文件占用其所在磁盘总空间的百分比，即：

           - 如果日志和数据共用同一磁盘，则数据文件占用其所在磁盘总空间的百分比为 60%。
           - 如果日志和数据独占磁盘时，则数据文件占用其所在磁盘总空间的百分比为 90%。
 - 配置 `datafile_maxsize` 时，其值需要大于当前数据文件占用的磁盘空间大小 `datafile_size`（或 `datafile_disk_percentage`），如果设置的值小于当前数据文件占用的磁盘空间大小，则不会触发自动扩容。
 - 如果 `datafile_maxsize` 的值超过了当前磁盘的最大可用空间，则以实际磁盘的可用大小作为最大值。
 - 对于 `datafile_next`：

     - 当 `datafile_next` 设置为小于或等于 `1G` 的值时，`datafile_next` 的取值为 `min (1G, datafile_maxsize * 10%)`。
     - 当 `datafile_next` 设置为大于 `1G` 的值时，`datafile_next` 的取值为 `min ( datafile_next, 磁盘剩余空间)`。

## 注意事项及使用限制

- 配置磁盘数据文件的自动扩容功能时，建议步长 `datafile_next` 的初始配置设置为 `datafile_maxsize` 的 20% 左右，避免频繁扩容。
 - 开启数据文件自动扩容后，需要做好同一机器上同时部署的其他应用程序的容量规划，避免造成实际可扩容的最大空间，小于配置所指定的 `datafile_maxsize` 的值的问题。
 - 当前暂不支持磁盘数据文件的动态缩容。
 - 如果不希望开启自动扩容功能，可以直接将 `datafile_next` 或 `datafile_maxsize` 的值设置为 `0M` 或者保持为默认值 `0M`，系统将会按照原来的预分配的方式，将一部分磁盘空间预留给数据文件。

## 如何启动数据文件的自动扩展

### 步骤一：查看当前配置项的值

在配置磁盘数据文件的动态扩容前，需要先查看各配置项的值，以便了解各配置项的配置情况。

1. 使用 `root` 用户登录集群的 `sys` 租户。
 2. 依次执行以下命令，查看各配置项的值。

   ```sql
   SHOW PARAMETERS LIKE 'datafile_size';

   ```

   ```sql
   SHOW PARAMETERS LIKE 'datafile_disk_percentage';

   ```

   ```sql
   SHOW PARAMETERS LIKE 'datafile_next';

   ```

   ```sql
   SHOW PARAMETERS LIKE 'datafile_maxsize';

   ```

### 步骤二：配置磁盘数据文件的动态扩容

获取各配置项的值后，您可以根据实际使用场景，通过修改配置项的值来实现磁盘数据文件的自动扩容。

#### 集群启动时，已配置 datafile_size（或 datafile_disk_percentage）、datafile_next、datafile_maxsize

如果您在部署 OceanBase 数据库并启动 OceanBase 集群时，已将 `datafile_size`（或 `datafile_disk_percentage`）、`datafile_next` 及 `datafile_maxsize` 配置为非 0 的值，则：

- 如果 `datafile_maxsize` 的值大于 `datafile_size` 的值，或者 `datafile_maxsize` 的值大于根据 `datafile_disk_percentage` 比例换算的磁盘空间大小，则集群启动后，扩容就会自动生效。
 - 如果 `datafile_maxsize` 的值小于 `datafile_size` 的值，或者 `datafile_maxsize` 的值小于根据 `datafile_disk_percentage` 比例换算的磁盘空间大小，则需要将 `datafile_maxsize` 的值修改为大于 `datafile_size` 的值后，才能开启数据文件的自动扩容。

#### 集群启动时，仅配置了 datafile_size（或 datafile_disk_percentage）

如果您在部署 OceanBase 数据库并启动 OceanBase 集群时，仅设置了 `datafile_size` 或 `datafile_disk_percentage` 的值，您只需要手动设置 `datafile_maxsize` 和 `datafile_next` 的值，并且确保 `datafile_maxsize` 的值大于 `datafile_size` 的值，或者大于根据 `datafile_disk_percentage` 比例换算的磁盘空间大小即可。

#### 集群启动时，未配置 datafile_size（或 datafile_disk_percentage）、datafile_next、datafile_maxsize

如果您在部署 OceanBase 数据库并启动 OceanBase 集群时，`datafile_size`（或`datafile_disk_percentage`）、`datafile_next`、`datafile_maxsize` 等均未设置，您可以参考以下步骤，开启磁盘数据文件的自动扩容。

#### 注意

集群首次启动时是否设置 `datafile_size` 或 `datafile_disk_percentage`，主要影响的是磁盘初始数据文件的大小。

具体操作如下：

1. 使用 `root` 用户登录集群的 `sys` 租户。
 2. 执行以下语句，确认当前磁盘已经预分配的空间。

   ```sql
   SELECT data_disk_allocated/1024/1024/1024 AS datafile_G FROM oceanbase.GV$OB_SERVERS;

   ```

   查询结果的示例如下。

   ```shell
   +-------------------+
   | datafile_G        |
   +-------------------+
   | 1770.000000000000 |
   +-------------------+
   1 row in set

   ```

   根据查询结果，当前磁盘数据文件预分配的空间大小 `data_disk_allocated` 为 1770 GB，约 1.7 TB。

   `GV$OB_SERVERS` 视图的更多字段说明，请参见 [GV$OB_SERVERS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000641504)。
 3. 根据上一步得到的结果，将 `datafile_maxsize` 的值设置为一个比 `data_disk_allocated` 大的值，同时设置 `datafile_next` 为一个非 0 的值。

   设置示例如下：

   ```sql
   ALTER SYSTEM SET datafile_maxsize='4TB';

   ```

   ```sql
   ALTER SYSTEM SET datafile_next='1TB';

   ```
 4. 设置成功后，执行以下语句，再次确认自动扩容设置是否生效。

   ```sql
   SELECT data_disk_allocated/1024/1024/1024 AS datafile_G, data_disk_capacity/1024/1024/1024 AS datafile_max_G FROM oceanbase.GV$OB_SERVERS;

   ```

   ```shell
   +-------------------+-------------------+
   | datafile_G        | datafile_max_G    |
   +-------------------+-------------------+
   | 1770.000000000000 | 4096.000000000000 |
   +-------------------+-------------------+
   1 row in set

   ```

   根据查询结果，当前磁盘数据文件自动扩容的最大上限空间 `data_disk_capacity` 的值为设置的 `datafile_maxsize` 的值，且 `data_disk_capacity` 的值大于 `data_disk_allocated` 的值，说明自动扩容设置成功。

### 后续操作

配置成功后，后续系统会根据数据文件的实际使用情况，结合 `datafile_next` 和 `datafile_maxsize` 的值进行自动扩容，最大限度地降低对磁盘的分配。

## 相关文档

- [OBServer 节点安装目录结构](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000640177)
 - [部署 OceanBase 社区版](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000640298)
 - [部署 OceanBase 企业版](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642538)
 - [datafile_size](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642119)
 - [datafile_disk_percentage](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642195)
 - [datafile_next](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642315)
 - [datafile_maxsize](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642241)
 - [修改集群参数](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000639933)

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