资讯专栏INFORMATION COLUMN

SQL执行计划COE绑定后依旧频繁变化问题分析

IT那活儿 / 3551人阅读
SQL执行计划COE绑定后依旧频繁变化问题分析

亲爱滴伙伴们,大家好。今天聊聊最近遇到的一个SQL使用COE脚本绑定执行计划后,执行计划依旧跳大绳样的频繁变化的问题。故事得从值班同事收到告警短信:“racdb1SQL_ID:fhupp15vwzxt1执行计划频繁改变”说起。


登上环境检查发现该sql_id的执行计划一直在频繁变化。

注:红框选中的为SQL的hash_value


哥们我在使用COE脚本对执行计划1957363513绑定之后发现执行计划还是一直在变化。


这就有点奇怪了,为啥会这样?接下来查看各执行计划有啥区别:

在表t_bh_tab1走了IDX_T_BH_TAB_1索引


在表t_bh_tab1走的是全表扫


在表t_bh_tab1走了IDX_T_BH_TAB_2索引


看到这儿我们会发现SQL各执行计划区别在于t_bh_tab1表上扫描方式不一样,通过查询v$sql_plan发现该SQL对应的表所属用户有user1,user2,user0。


接下来我们查看这三个用户下t_bh_tab1表的索引情况:(基于安全要求,索引情况未做截图)通过比对发现user1跟user2是完成一致的,都是10个索引,但user0上只有8个,其中7个索引是相同的,有一个主键索引是独有的。user1,user2比user0多三个索引:

IDX_T_BH_TAB_1

IDX_T_BH_TAB_9

IDX_T_BH_TAB_10


少一个主键索引:
PK_T_BH_TAB


在确认SQL表统计信息正常的情况下,发现执行计划1957363513走的索引是IDX_T_BH_TAB_1,但user0用户下的该表没有这个索引。但执行计划1001134107走的IDX_T_BH_TAB_2索引是三个用户都有的。通过做sqlt发现执行计划1001134107比执行计划1957363513更高效。


于是将执行计划1957363513解绑,并使用coe_xfr_sql_profile.sql脚本对执行计划1001134107进行绑定


图中我们选中了一个消耗最少的执行计划。然后会生成绑定执行计划的sql脚本

运行脚本即完成了SQL执行计划的绑定,注意在绑定之后要让SQLcursor失效重新解析就会使用绑定的执行计划。


至此SQL执行计划就未再发生改变,也就是所有用户的该SQL执行计划恢复正常。


好了,本次分享结束,我们下次见。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130170.html

相关文章

  • 开源|性能优化利器:数据库审核平台Themis的选型与实践

    摘要:正是存在问题,促使我们考虑引入数据库审核平台。的确,与很多互联网公司相比,数据库数十套的估摸并不是太大但与互联网类公司不同,类似宜信这类金融类公司对数据库的依赖性更大,大量的应用是重数据库类的,且其使用复杂程度也远比互联网类的复杂。 作者:韩锋 出处:DBAplus社群分享 Themis开源地址:https://github.com/CreditEaseDBA 拓展阅读:宜信开源|数...

    wenhai.he 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<