troubleshooting not JPPD cause View is a set query block

本案例来自同事咨询我的一个sql案例,数据库版本为11.2.0.4,经过同事的分析发现,sql性能差的原因是没有做连接谓词推入,但是没有找到原因。

sql文本:

 

sql很长,看看执行计划:

同事的主要问题就是分析UNION ALL视图为什么没有做连接谓词推入。

通过10053发现:

JPPD被优化器拒绝的原因居然是这是一个集合查询块,这是明显不可能的。因为做sql优化很多的人肯定知道,对于UNION ALL视图肯定是可以做连接谓词推入的。测试去掉UNOIN ALL里面的group by就可以推入,加上就不行。这非常不科学。

进一步分析,模拟sql结构测试,我的环境只有19c的,结果发现19c是可以的,而11g不行。

19c:

11g:

这很有可能是bug了,由于正好我的版本比较高19c,可以通过遍历fix control去排查,这里其实还有一个技巧,就是如果明确了是哪个功能出现了bug的话,可以直接去fix control里面查询看看11g之后修复了哪个bug从而修复了这个问题。

很明显命中了bug 21099502,描述为Enable extended JPPD for UNION[ALL] views having group by,在12.2修复的。

查询mos,Bug 21099502 Join Predicates not pushed into UNION ALL view having group by and aggregates,非常匹配。该bug在12.2修复。

应该是CBO在JPPD查询转换时,在11g版本之前漏掉了UNION ALL内嵌视图中包含group by的情况,在12.2版本做了修复。

此条目发表在Oracle, Oralce performance分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注