首批通过分布式安全可靠测评,为关键业务系统打造
使用 ADAPTIVE JOIN 导致结果少行
更新时间:2026-05-15 09:06
问题现象
执行如下计划时,预期有结果,实际输出空的结果集。
计划满足的要求是,存在一个 JOIN 算子,它的两个孩子一个是 PKEY EXCHANGE 算子,另一个是 ADAPTIVE JOIN。
ADAPTIVE JOIN 的计划形态如下。
HASH JOIN
NESTED-LOOP JOIN
STATISTICS COLLECTOR
....
下面的计划中,5 号 HASH JOIN 和 6 号 NESTED LOOP JOIN 构成了一个 ADAPTIVE JOIN。
4 号 HASH JOIN 满足了左孩子是 ADAPTIVE JOIN,右孩子是 PKEY EXCHANGE。

关键诊断信息
触发条件
开启了 ADAPTIVE JOIN,OceanBase 数据库 V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)版本上默认开启,V4.2.5 BP1 版本开始默认关闭。
事前巡检
不需要巡检,ADAPTIVE JOIN 功能目前不稳定,建议 V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)版本上都将该功能先关闭。
事后诊断
是否生成空结果集,计划是否符合上述条件。
问题原因
ADAPTIVE JOIN 的 BUG 导致,当生成 PKEY 计划并且 PKEY 的目标侧是一个 ADAPTIVE JOIN 时,计划生成阶段设置为 PKEY EXCHANGE 的 TABLE_ID 有问题,导致数据无法根据分区 ID 分发到正确的线程,从而导致上层的 JOIN 生成了空的结果集。
问题的风险及影响
造成正确性问题,执行 SQL 生成空结果集。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库企业版 V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)及之后版本。
解决方法
关闭 ADAPTIVE JOIN,刷新 plan cache。
规避方式
在 OceanBase 数据库 V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)或从 V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)升级上来的版本中,关闭 ADAPTIVE JOIN。
-- sys 租户执行
ALTER SYSTEM SET _adaptive_join_enabled = false tenant = all;