首批通过分布式安全可靠测评,为关键业务系统打造
数据库分区均衡过程中频繁出现 -4013 错误,分区磁盘均衡过程卡住
更新时间:2026-05-21 09:16
问题现象
用户在 OceanBase 集群的 OCP 管理平台上断断续续收到 alloc failed reason is that single alloc size large than 4G is not allowed 的告警,错误码为 -4013。该告警出现在进行分区均衡操作时,表明单次分配内存超过了 4GB 限制。 或者分区均衡任务持续卡住不生成新的 transfer 任务,租户1号日志流 Leader 机器上 OBServer 日志中大量重复的 process_balance_partition_disk_ 日志。
关键诊断信息
触发条件
使用了 OceanBase 数据库 V4.2.5 BP2 至 V4.2.5 BP3 版本。
均衡组内分区磁盘占用偏差较大,比如存在单个分区过大(同表分区大小 1.4TB 对比 2GB)的情况,或者大量空分区的情况。
事前巡检
检查表的分区情况,特别是是否存在异常大的分区。
监控各节点的磁盘使用情况,确保没有显著的磁盘占用偏差。
事后诊断
查看 observer.log 日志文件,搜索关键词
malloc_allocator.*tenant: 1028,确认是否有内存分配失败的日志记录。租户 1 号日志流 Leader 机器上查看 observer.log 日志文件,搜索关键字
Txxxx_TBalan(xxxx 为租户 ID)查看均衡线程,确认是否有大量重复的process_balance_partition_disk_日志,确认是否有尝试进行重复的分区均衡记录。
问题原因
内核 BUG。当均衡组内各分区组磁盘占用偏差较大(例如同表分区大小 1.4TB 对比 2GB,或有空分区)时,该版本分区均衡的磁盘均衡算法无法处理这种情况,导致后台不断重复生成逻辑 transfer 任务,形成死循环,进而引发内存分配失败(错误码 -4013)。
问题的风险及影响
分区均衡的磁盘均衡无法完成,后台不断重复触发,间断性租户内存占用高,会有 -4013 报错。
如果业务租户内存较小,有一定概率影响业务正常运行。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响版本
OceanBase 数据库企业版 V4.2.5 BP2(oceanbase-4.2.5.2-102000122025011711)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.2.5 BP4(oceanbase-4.2.5.4-104000082025052817)及之后版本。
手动取消当前分区均衡任务:
ALTER SYSTEM CANCEL BALANCE JOB [TENANT = '$tenant_name'];。关闭磁盘均衡,绕过该问题:将租户配置项
balancer_tolerance_percentage(设置负载均衡策略)调整至 99。建议客户侧拆分超大分区:对于存在超大二级分区(同表分区大小1.4TB对比2GB)的情况,需要重新设计分区策略,避免后续扩缩容的风险。
规避方式
在进行分区均衡之前,检查并优化表的分区策略,避免单个分区过大。
调整租户配置项
balancer_tolerance_percentage(设置负载均衡策略),调大该配置项以减少磁盘均衡任务的触发频率。升级 OceanBase 数据库至 V4.2.5 BP4 或更高版本,以获得对该问题的修复。