首批通过分布式安全可靠测评,为关键业务系统打造
配置磁盘数据文件的动态扩容
更新时间:2026-06-07 12:21:58
OceanBase 数据库支持根据磁盘数据文件的实际使用情况来进行自动扩容。
背景信息
在 OceanBase 数据库中,存储数据的文件名为 block_file,block_file 文件位于 /OBServer 节点安装目录/store/sstable 目录下,该文件是在各 OBServer 节点启动后创建。且 block_file 文件的大小由配置项 datafile_size 或 datafile_disk_percentage 控制。更多 OceanBase 数据库数据文件目录的详细介绍请参见 OBServer 节点安装目录结构。
对于 OceanBase 数据库 V4.2.0 之前的版本,系统主要采用预分配的方式,将一部分磁盘空间预留给数据文件,以保证数据文件占有一段尽可能连续的磁盘空间,避免其他应用程序对磁盘的抢占引起的磁盘资源不足。但这种预分配的方式占用了很大的磁盘空间,即使磁盘空间没有被使用,也不能被释放。
为了解决预分配大块磁盘空间但不能被释放的问题,从 V4.2.0 版本开始,OceanBase 数据库引入了数据文件渐进式使用磁盘空间的用户配置选项,即系统先预分配一个合理的磁盘大小给数据文件,再根据磁盘的实际使用情况和用户的配置进行自动扩容。
相关配置项
OceanBase 数据库主要通过以下配置项配合使用来达到磁盘数据文件的自动扩容:
datafile_size:用于设置数据文件占用磁盘可用空间的大小。默认值为0M。有关集群级配置项datafile_size的详细说明,请参见 datafile_size。datafile_disk_percentage:磁盘数据文件占用磁盘总空间的百分比,默认值为0。有关集群级配置项datafile_disk_percentage的详细说明,参见 datafile_disk_percentage。datafile_next:用于设置磁盘数据文件自动扩容的步长,默认值为0,表示不启动增长,如果需要开启自动增长,则需要设置为非 0 的值。有关集群级配置项datafile_next的详细说明,请参见 datafile_next。datafile_maxsize:用于设置磁盘数据文件自动扩容的最大空间,默认值为0,表示不启动自动扩容。有关集群级配置项datafile_maxsize的详细说明,参见 datafile_maxsize。
在配置上述配置项时,需要注意如下事项:
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或者保持为默认值0,系统将会按照原来的预分配的方式,将一部分磁盘空间预留给数据文件。
如何启动数据文件的自动扩展
步骤一:查看当前配置项的值
在配置磁盘数据文件的动态扩容前,需要先查看各配置项的值,以便了解各配置项的配置情况。
使用
root用户登录集群的sys租户。执行以下命令,查看各配置项的值。
obclient> SHOW PARAMETERS LIKE '%datafile_%';
步骤二:配置磁盘数据文件的动态扩容
获取各配置项的值后,您可以根据实际使用场景,通过修改配置项的值来实现磁盘数据文件的自动扩容。
集群启动时,已配置 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,主要影响的是磁盘初始数据文件的大小。
具体操作如下:
使用
root用户登录集群的sys租户。执行以下语句,确认当前磁盘已经预分配的空间。
obclient> SELECT data_disk_allocated/1024/1024/1024 AS datafile_G FROM oceanbase.GV$OB_SERVERS;查询结果的示例如下。
+-------------------+ | datafile_G | +-------------------+ | 1770.000000000000 | +-------------------+ 1 row in set根据查询结果,当前磁盘数据文件预分配的空间大小
data_disk_allocated为 1770 GB,约 1.7 TB。GV$OB_SERVERS视图的更多字段说明,请参见 GV$OB_SERVERS。根据上一步得到的结果,将
datafile_maxsize的值设置为一个比data_disk_allocated大的值,同时设置datafile_next为一个非 0 的值。设置示例如下:
ALTER SYSTEM SET datafile_maxsize='4TB';ALTER SYSTEM SET datafile_next='1TB';设置成功后,执行以下语句,再次确认自动扩容设置是否生效。
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;查询结果的示例如下。
+-------------------+-------------------+ | 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 的值进行自动扩容,最大限度地降低对磁盘的分配。