首批通过分布式安全可靠测评,为关键业务系统打造
NLJ batch rescan,右支 tsc 子算子需要逆序排序,结果错误的原因和解决方法
更新时间:2026-05-15 09:06
问题现象
当生成的执行计划包含 NLJ/SPF,并且走 batch rescan 优化时,如果走逆序排序的话,可能会导致查询结果错误;
关键诊断信息
触发条件
执行计划里包含 NLJ 算子,NLJ 算子走 batch rescan(use_batch = true);NLJ 算子的右支包含 window function,并且右支算子底下的 table scan 算子进行逆序扫描(reverse关键字)。
事后诊断
执行计划里包含 NLJ 算子,NLJ 算子走 batch rescan(use_batch = true);NLJ算子的右支包含 window function,并且右支算子底下的 table scan 算子进行逆序扫描(reverse关键字)。

问题原因
针对 batch rescan 的场景,table scan 在调存储层的扫描接口时,需要存储层优先保证单个 batch 内按照 group_id 的顺序进行排序(即按照 table scan 给定的 range 序进行输出),相同的 group 内默认会按照正序进行输出;当用户指定为逆序(reverse)时,会出现结果错误。
问题的风险及影响
会导致正确性问题,查询结果不对。
影响租户
影响 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 BP2(oceanbase-4.2.1.2-102010012023120119)及之后版本。
规避方式
关掉 nlj batch 优化。
set global _nlj_batching_enabled=false;