6,执行很快,于是让应用开发人员在该sql执行前后加一个时间输出到日志里面,看看sql到底执行了多长时间,测试结果是58秒。
?
7,此时就确认应该sql在sqlplus和程序里的执行计划不一样,于是考虑针对sql_id:1huatx9vws2u3做一个sqlrpt。

8,为了再现这个差的执行计划是否真的执行很长时间,于是对该sqlid做了一个advanced的执行计划显示,并取出其中的差的Outline Data添加到sql里面然后再次执行。
?
SQL> select * from table(dbms_xplan.display_cursor('1huatx9vws2u3',null,'advanced'));
把plan hash value为353242268 outline data拿出来,outline data其实就是个hint,加到select后面,再现差的执行计划的执行效率:
?
?
SELECT /*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.4')
DB_VERSION('11.2.0.4')
ALL_ROWS
OUTLINE_LEAF(@"SEL$2AD7F9D9")
PUSH_PRED(@"SEL$B29E968D" "VW_SQ_1"@"SEL$E9784550" 7 6 5 4)
OUTLINE_LEAF(@"SEL$B29E968D")
UNNEST(@"SEL$3")
OUTLINE_LEAF(@"SEL$385088EC")
UNNEST(@"SEL$5")
OUTLINE_LEAF(@"SEL$6")
OUTLINE_LEAF(@"SET$1")
OUTLINE_LEAF(@"SEL$1")
OUTLINE(@"SEL$291F8F59")
OUTLINE(@"SEL$B29E968D")
UNNEST(@"SEL$3")
OUTLINE(@"SEL$E9784550")
OUTLINE(@"SEL$3")
OUTLINE(@"SEL$4")
OUTLINE(@"SEL$5")
OUTLINE(@"SEL$2")
NO_ACCESS(@"SEL$1" "T4"@"SEL$1")
INDEX_RS_ASC(@"SEL$1" "T3"@"SEL$1" ("TD_B_SERVICE"."SERVICE_ID"))
INDEX_RS_ASC(@"SEL$1" "T1"@"S