暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

116-oracle 19c 打patch后某些SQL执行效率可能会下降

这个问题是我在测试时偶然发现的,找了一些bugs fixed lists,没有找到相关说明.
测试SQL:
    select count(*from t1 a
    ,(select id,object_name from t10m 
    union all 
    select id,object_name from t5m
    ) b 
    where a.object_id=b.id 
    and a.object_name='TAB';
    复制
    其中t1表是从dba_objects复制而来,object_name字段上有索引;  
    t10m表是t1复制多次到记录数1000万条,id是主键; 
    t5m 表是t1 复制多次到记录数500万条, id是主键.

    19.3 版本的执行计划如下,执行时间不到0.01秒:

    19.19版本的执行计划如下, 执行时间21秒, 性能下降非常严重:

    19.19版本,如果把t10m和t5m换成t2,t3 两个类似t1的小表, 执行计划又正常了:

    检查执行计划相关内容, 异常执行计划有如下提示:

    Note

    -----

       - vector transformation used for this statement


    根据上面提示,检查vector相关参数设置, 有如下发现:
    _optimizer_vector_min_fact_rows       10000000
    测试SQL使用的t10m表刚好1000万记录, 于是将改参数调大再测:
    alter session set "_optimizer_vector_min_fact_rows"=50000000;
    执行计划马上就变正常了.

    总结:
      这个问题不知道是在19c的哪个patch版本引入的, 如果你的系统存在类似SQL,如果相关表的记录数超过了1000万, 应该已经遇到了这个性能严重下降的问题.
       如果相关表的记录数不到1000万,但是仍在逐渐增长, 那么就存在一个隐患,当表的记录数增长到1000万, 收集了统计信息后, 执行计划就会变差, 严重影响系统性能.
    我没有找到官方相关workaround, 我的建议是修改上述隐含参数,调大.
    (全文完)


    文章转载自老虎刘谈oracle性能优化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论