SQL性能调优--使用DBLINK HINT /*+ driving_site(org) */性能提升100倍

前段时间做了一条SQL调优,这里记录一下,主要想梳理driving_site知识点,在这里也做个分享,立个Flag。

起因:
同事提出财务报表程式跑一个月资料时遇到Web页面超时报错,定位相应的view查询性能不好,并协助对其进行tuning。

调优效果:

原因 解决方案 效果
关联查询Remote DB CTN1105G 建议加上driving_site hint 161min->1.5min

Tuning过程:
分析program,定位为View v_rec_5454查询性能慢导致program执行timeout,然后对该View查询SQL查看执行计划,如下图:在这里插入图片描述
从SQL执行计划可以看到,在Local DB的Local Table Access方面,并没有Large Table的full table scan,index都能用上。关注最后一行,有Remote Access CTN1105。这个Table在Remote DB,切是个大Table,因为Table不在Local,所以无法直接看到对这个Table的Access是走Index或者Full Table Scan。

真正执行上述查询,执行期间查看V$SESSION.EVENT(本视图记录了每个session的每一项等待事件),可以看到wait ing event是在SQL*Net message from dblink,符合慢在CTN1005@REMOTE_DBLINK的猜想。

结论:
综合评估,修改view,通过hint driving_site指定先以Remote DB的CTN1105作为driving table,并进行查询测试,大约90秒完成查询,且网络传输上性能也大大提升。

create or replace view v_rec_5454 as
select /*+ driving_site(f) */  b.entry_office Depot_Code,

知识点:
Oracle中Driving_site Hint的优化策略和思路:
策略:远程访问,网络传输占很大部分,优化原则,减少网络传输,将小的结果集拉到本地处理;
思路1:可以在远端数据库建立视图,在远端执行;
思路2:使用DRIVING_SITE将数据拉到本地执行处理;

发布了22 篇原创文章 · 获赞 35 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_27431397/article/details/105522148