首批通过分布式安全可靠测评,为关键业务系统打造
SPF 算子 Batch Rescan 没有 reset 内存导致的 core
更新时间:2026-05-14 09:21
问题现象
当业务中存在 SPF(subplan filter)算子,并且走了 batch rescan 的 SQL 时,可能导致内存写坏进而出现一些非预期的 core dump;有时 core 会通过包含 SPF(subplan filter)的 SQL 触发,也可能会因为内存写坏导致一些无关的 SQL 也会 core。
关键诊断信息
触发条件
业务中存 SPF(subplan filter)算子,并且走了 batch rescan 的 SQL 时。
事后诊断
执行计划里需要存在一个走 batch 的 SPF(subplan filter)算子,并且 SPF(subplan filter)算子的上层需要存在一个支持 rescan 接口的算子(NLJ/SPF)等;此外,还需要打开向量化引擎(默认打开)。

问题原因
SPF(subplan filter)算子在进行 batch rescan 时没有 reset 向量化缓存,导致内存写坏出现一些非预期的 core。
问题的风险及影响
当 SQL 生成 SPF(subplan filter)算子,并且走了 batch rescan 特征的执行计划时,在运行过程中可能会 core 掉;或者一些无关 SQL 也会 core 掉。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响版本
OceanBase 数据库企业版 V4.1.0 GA(oceanbase-4.1.0.0-100001122023040322)及之后版本、V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.2.1 BP1(oceanbase-4.2.1.1-101000062023103122) 及之后版本。
说明
修复版本中通过 _enable_spf_batch_rescan 配置项默认关闭 SPF(subplan filter)的 batch rescan 来规避这个问题,并且对向量化缓存进行 reset。
规避方式
关掉 global _nlj_batching_enabled 开关。
# 一些场景下可能会有性能回退
set global _nlj_batching_enabled=false;