首批通过分布式安全可靠测评,为关键业务系统打造
数据库租户 Unit 数从 4 扩展至 5 时卡住且新扩展的磁盘空间已满出现错误代码 -4184 的处理方法
更新时间:2026-06-10 01:56
问题现象
在对 OceanBase 数据库进行扩容操作时,新增节点的磁盘空间迅速达到上限,导致扩容过程卡住。具体表现为新扩节点的数据磁盘使用率超过预设限制(默认 90%),且扩容过程中出现错误代码 -4184,提示磁盘空间不足。 (注意,怀疑是此问题时需要确认磁盘满机器上的剩余磁盘空间,是否真的小于,迁移失败的日志流副本的磁盘占用。如果剩余磁盘空间明显大于副本实际大小,可能是迁移过程中磁盘膨胀导致的问题。)
关键信息
新增节点的数据磁盘使用率超过 90%。
租户非分区表磁盘占用差距较大(例如:租户内共 400 个非分区表,其中 200 个有数据的非分区表,最大可达 191GB,另外 200 个空的非分区表)。
迁移报错 -4184,提示磁盘空间不足。
问题原因
此问题是由于 OceanBase 内核在扩容时给新增节点分配分区时,仅根据分区个数进行选择,而未考虑各分区的实际磁盘占用情况。在该集群中,存在 400 个非分区表,其中 200 个表含有大量数据(最大可达 191GB),另外 200 个表为空表。这种情况下,扩容时可能会选择到连续的大分区,但由于新节点的磁盘空间有限,无法容纳这些大分区,从而导致磁盘满和扩容失败。
问题的风险及影响
磁盘满,迁移任务不断重复并失败,扩容卡住。
可能导致业务中断或性能下降。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库企业版 V4.2.0 GA(oceanbase-4.2.0.0-100010082023083014)及之后版本、V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本、V4.2.2 GA(oceanbase-4.2.2.0-100000082024011317)及之后版本、V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)及之后版本、V4.3.0(oceanbase-4.3.0.0-100000072024020200)及之后版本、V4.3.5 GA(oceanbase-4.3.5.0-100000122024123020)及之后版本。
解决方法
主要思路如下:
关闭
enable_rebalance参数,以中断自动均衡过程。手动执行
transfer partition命令,将分区从新节点回滚至原节点,缓解磁盘压力。在业务高峰期过后,重新评估并调整分区策略,确保磁盘占用更加均衡后再尝试扩容。
需联系 OceanBase 数据库技术支持人员协助处理。
规避方式
业务侧合理设计表结构,将非分区表改为分区表,避免单个分区过大。
避免集群中存在大量空的非分区表,减少扩容时自动选择分区命中 bad case。
在进行扩容操作前,预先检查现有分区的磁盘占用情况,确保新节点有足够的空间来容纳迁移过来的分区。