首批通过分布式安全可靠测评,为关键业务系统打造
单 SQC + UDF 函数 hang 住
更新时间:2026-05-19 08:21
问题现象
执行计划包含 PX MergeSort + DOP=1 + UDF,且 hang 住,而且在对应的未修复版本 该 BUG 复现的充分条件为:
SQL 中包含嵌套语句,至少包含以下三种情形的一种。
1)SQL 中包含 UDF。 2)SQL 涉及表存在外键。 3)SQL 涉及表存在 Trigger。
SQL 执行计划为分布式执行计划。(PS:查询涉及表中至少有一张为分区表)
SQL 包含 order by 且要求最终的结果集有序输出。
SQL 输出的最终结果集平均每台 Server 输出结果集超过 64K。
关键诊断信息
触发条件
SQL 中包含嵌套语句,至少包含以下情况。
1)SQL 中包含 UDF。 2)SQL 涉及表存在外键。 3)SQL 涉及表存在 Trigger。
SQL 执行计划为分布式执行计划。(PS:查询涉及表中至少有一张为分区表)
SQL 包含 order by 且要求最终的结果集有序输出。
SQL 输出的最终结果集平均每台 Server 输出结果集超过 64K。
问题原因
PX + UDF 的场景会导致事务推进无法串行完成,导致 sql illegal 报错,引入单 SQC 调度,而单 SQC 调度在一些场景(PL UDF,TRIGGER,FOREIGN KEY...)会碰到。
问题的风险及影响
风险很高,会导致 hang 在 DTL 上,类似下面这样 wait_unblocking。

影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响版本
OceanBase 数据库企业版 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP19(oceanbase-2.2.77-119000122024060513)、V3.2.3 BP9(oceanbase-3.2.3.3-109000182023071410)、V3.2.3 BP8 Hotfix2(oceanbase-3.2.3.3-108020022023051212)、V3.2.3 BP8 Hotfix3(oceanbase-3.2.3.3-108030022023051915)、V3.2.3 BP8 Hotfix4(oceanbase-3.2.3.3-108040052023060909)、V3.2.3 BP8 Hotfix5(oceanbase-3.2.3.3-108050012023070409)、V3.2.3 BP8 Hotfix6(oceanbase-3.2.3.3-108060012023102510)、V3.2.4 BP1 Hotfix1(oceanbase-3.2.4.1-101010022023051317)、V3.2.4 BP3 Hotfix1(oceanbase-3.2.4.3-103010022023051317)、V3.2.4 BP3 Hotfix2(oceanbase-3.2.4.3-103020012023051810)、V3.2.4 BP4(oceanbase-3.2.4.4-104000052023062021)。
规避方式
不用 UDF 函数以及计划绑定不生成 PX MergeSort 算子。