DBA_HIST_SQL_PLAN视图记录SQL执行计划的历史信息,对于SQL调优非常有用,可以通过SQL_ID等信息定位到SQL具体的执行计划;
而通过EXPLAIN PLAN得到的执行计划则是当前的执行计划。
分析AWR,在里面找到一条大SQL
通过这条SQL的SQL_ID,可以定位到之前这条SQL具体的执行计划
可以看到这条SQL分别使用了3种执行计划,一种使用主键索引,另外分布使用其他两个联合索引,进而导致执行计划不稳定
调优的思路:
通过HINT固定执行计划为使用主键索引
UPDATE /*+ index(OSL_ODC_GENERIC_TARGET PK_OSL_ODC_GENERIC_TARGET) */ OSL_ODC_GENERIC_TARGET SET N_STATUS = :1 , C_ERRORCODE = :2 , D_UTCSTATUSTIME = :3 , D_UTCSTARTTIME = :4 WHERE ((N_ID = :5 ) AND (N_STATUS IN (:6 , :7 )));
而通过EXPLAIN PLAN得到的执行计划则是当前的执行计划。
分析AWR,在里面找到一条大SQL
![](http://img.blog.itpub.net/blog/attachment/201702/21/26506993_1487665215tj1r.png?x-oss-process=style/bb)
通过这条SQL的SQL_ID,可以定位到之前这条SQL具体的执行计划
![](http://img.blog.itpub.net/blog/attachment/201702/21/26506993_1487665416qnI9.png?x-oss-process=style/bb)
可以看到这条SQL分别使用了3种执行计划,一种使用主键索引,另外分布使用其他两个联合索引,进而导致执行计划不稳定
调优的思路:
通过HINT固定执行计划为使用主键索引
UPDATE /*+ index(OSL_ODC_GENERIC_TARGET PK_OSL_ODC_GENERIC_TARGET) */ OSL_ODC_GENERIC_TARGET SET N_STATUS = :1 , C_ERRORCODE = :2 , D_UTCSTATUSTIME = :3 , D_UTCSTARTTIME = :4 WHERE ((N_ID = :5 ) AND (N_STATUS IN (:6 , :7 )));
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26506993/viewspace-2134058/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26506993/viewspace-2134058/