cardinality feedback used for this statement 的BUG

来源:互联网 发布:php导出excel表格乱码 编辑:程序博客网 时间:2024/06/05 08:17

1,今天上午用户反馈系统缓慢, 

      查发现大量在执行同一条SQL语句。


2, 看执行计划,执行NEST LOOP嵌套循环  一个全表。






3, 初步怀疑是统计信息不对, 重新收集下统计信息。

      执行计划还是有问题。



4,

查看慢的执行计划,

Note
-----
   - dynamic sampling used for this statement (level=2)
   - cardinality feedback used for this statement
 

查看正常的执行计划:

Note
-----
   - dynamic sampling used for this statement (level=2)



5, 百度Cardinality Feedback :

Cardinality Feedback是11GR2出现的一个新特性,它的出现是为了帮助ORACLE优化器依据更精准的Cardinality 产生出更加优秀的执行计划。Cardinality基数的评估准确与否,对于优化器异常重要,直接影响到后续的JOIN COST等重要的成本计算评估,如果评估不当会造成CBO选择不当的执行计划。此技术对于仅执行一次SQL无效,在SQL第一次执行时,记录存储实际的Cardinality 和评估的Cardinality之间的差异,如果差异较大,在第二次执行时,优化器会依据实际的Cardinality 重新决策生成执行计划,但是需要注意的是,当使用更准确的Cardinality重新生成执行计划时,不一定生成的执行计划与第一次时不一样,完全有可能是相同的。 这个技术的出现是由于优化器在一些情况下不能很好的去计算Cardinality的数值,比如:统计信息缺失或陈旧、多谓词、直方图缺失或者缺少直方图等等,在这些情况下,Cardinality Feedback可能会帮上忙。


6, 问开发人员,自己了标量子查询,还是一个DB LINK远程表   :  

SELECT
  a.* ,
 (select lookup_value_name  
      from f1.t1@DB1   V     
      where lookup_type_code = '111'          
        ) AS LOAN_BANK
from table1 ;       
 


7,  尝试 将f1.t1@DB1   改为本地表。

     系统恢复正常。

原创粉丝点击