首批通过分布式安全可靠测评,为关键业务系统打造
CONNECT BY 数据量过大导致内存溢出
更新时间:2026-05-09 01:51
问题现象
问题的现象是,CONNECT BY 查询不出来结果,报错 4013,如下图所示。

关键信息
触发条件
CONNECT BY 子句用于构建和展现层级数据,将结果以树状结构表示,从而清晰地展示元素之间的父子关系,出现问题的条件为,数据量非常大,在建树的过程中,树上的一个节点下有非常多的子节点,为了存储这些子节点,一次性申请的内存超过 4G。
问题原因
CONNECT BY 在建树的过程中,每次进入树的一个节点,需要把该节点的全部子节点都存储起来,然后逐个处理。在之前的实现中,CONNECT BY 使用一个连续的数组来存这些子节点,如果树中某个节点有非常多的子节点,为了能容纳这些子节点,连续的数组需要一次性申请很大的内存,而内存申请限制不能一次性超过 4G,从而可能会报内存错误,导致无法输出结果。修复之后,CONNECT BY 使用一个非连续的数组来存储这些节点,每次申请的内存不会再超过 4G,所以不会再报错。
问题的风险及影响
导致查询不出结果,报 4013。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 MySQL 租户无影响。
影响的版本
OceanBase 数据库 V2.2.77 BP19(oceanbase-2.2.77-119020012025040311)及之前的 BP 版本、V3.2.3 BP11(oceanbase-3.2.3.3-111000032024070822)及之前的 BP 版本、V3.2.4 BP7(oceanbase-3.2.4.7-107000012023113010)及之前的 BP 版本、V4.2.1 BP1(oceanbase-4.2.1.1-101000062023103122)及之前的 BP 版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V3.2.4 BP8(oceanbase-3.2.4.8-108000142024041520)、V4.2.1 BP2(oceanbase-4.2.1.2-102010012023120119)。修复之后无需减少数据量也不会再报错,可以正常输出结果。
应急办法:只能减少数据量,无法通过增加内存等方式解决。
规避方式
无规避方式。
修复引入的新风险
无风险。