1、生成某個會話跟蹤檔案
方式1:sql_trace
一、跟蹤其他會話
exec dbms_system.set_sql_trace_in_session(41,49,true);
exec dbms_system.set_sql_trace_in_session(7,284,true);
應用執行一段時間後
exec dbms_system.set_sql_trace_in_session(41,49,false);
exec dbms_system.set_sql_trace_in_session(7,284,false);
select value from v$diag_info where name='default trace file';
二、跟蹤當前會話:
alter session set sql_trace=true;
執行具體想要分析的語句
alter session set sql_trace=false;
select value from v$diag_info where name='default trace file';
接著$tkprof trace檔案 將跟蹤檔案轉化為標準格式的分析檔案。
方式2:10046事件
一、跟蹤其他會話:
exec dbms_system.set_ev(16,499,10046,8,'');
exec dbms_system.set_ev(16,499,10046,0,'');
二、跟蹤當前會話
sql> alter session set events '10046 trace name context forever,level 12';
執行具體想要分析的語句
sql> alter session set events '10046 trace name context off';
2、檢視執行過的語句的執行計畫(必須要確保你要查詢的sql語句還在shared pool中):
select sql_id from v$sql where sql_text='select count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id';
select * from table(dbms_xplan.display_cursor('a6hf64s57pz5b',null,'advanced'));
否則需要語句在awr中記錄,按照如下語句查詢:
select * from table(dbms_xplan.display_awr('a6hf64s57pz5b'));
select * from v$sqlarea a where a.sql_id='f10pn11qharkx';
3、檢視未執行的語句的執行計畫:
explain plan for select salary from employees where first_name like 'pat';
select * from table(dbms_xplan.display);
4、檢視正在執行的sql語句的執行計畫:
1、設定autotrace的命令。
分別在執行sql前設定set autotrace 的不同引數,得到不同的觀察效果
用法: set autot[race] [exp[lain]] [stat[istics]]
--關閉跟蹤執行計畫和統計資訊功能(預設關閉)。
sql> set autotrace off;
--執行計畫和統計資訊都顯示
sql> set autotrace on ;
--只顯示執行計畫和統計資訊,不顯示sql執行結果。
sql> set autotrace traceonly;
--只顯示執行計畫
sql> set autotrace on explain;
--只顯示統計資訊
sql> set autotrace on statistics;
使用autotrace功能時,oracle啟用了兩個session。
乙個用來執行sql。另乙個用來記錄執行計畫和輸出結果。
2、調優常用獲取執行計畫的方法( gather_plan_statistics ):
sql> alter session set statistics_level=all;
sql> select c1, c2, c3 from subquery_t2 t2
where c1 >= 20000
and c1 < 400000
and exists (select /*+ no_unnest */
'x'from subquery_t1 t1
where t1.c4 = t2.c1);
sql>select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
或者下面的方式可省略第一步
select /*+ gather_plan_statistics j1*/ c1, c2, c3
from subquery_t2 t2
where c1 >= 20000
and c1 < 400000
and exists (select /*+ no_unnest */
'x'from subquery_t1 t1
where t1.c4 = t2.c1);
select sql_id,child_number from v$sql where sql_text like '%test20180122%' and sql_text not like '%v$sql%';
select * from table(dbms_xplan.display_cursor('f7m13v249yp85',0,'allstats last'));
3、事件10046 trace跟蹤
set autotrace off;
alter session set statistics_level=typical;
alter session set events '10046 trace name context forever,level 12';
執行要分析的sql語句
alter session set events '10046 trace name context off';
找到跟蹤後產生的檔案
select d.value
|| '/'
|| lower(rtrim(i.instance,chr(0)))
|| '_ora_'
|| p.spid
|| '.trc' trace_file_name
from (select p.spid
from v$mystat m,v$session s,v$process p
where m.statistic#=1 and s.sid=m.sid and p.addr=s.paddr) p,
(select t.instance
from v$thread t, v$parameter v
where v.name='thread'
and (v.value=0 or t.thread#=to_number(v.value))) i,
(select value
from v$parameter
where name='user_dump_dest') d;
tkprof trc檔案 目標檔案 sys=no sort=prsela,exeela,fchela
4、10053事件
詳解 alter session set events '10053 trace name context forever,level 1';
alter session set events '10053 trace name context off';
awrsqrpt.sql 可用來檢視某條sql的多個執行計畫
多種方法檢視Oracle SQL執行計畫
二.使用oracle第三方工具 plsql developer f5 toad ctrl e 三.使用sql plus 如果plan table表不存在,執行 oracle home rdbms admin utlxplan.sql建立plan table表。如果plustrace角色不存在,執行 ...
Oracle 獲取執行計畫的幾種方法
explain plan以sql語句作為輸入,得到這條sql語句的執行計畫,並將執行計畫輸出儲存到計畫表中。首先,在你要執行的sql語句前加explain plan for,此時將生成的執行計畫儲存到計畫表中,語句如下 explain plan for sql語句 然後,在計畫表中查詢剛剛生成的執行...
檢視Oracle執行計畫的幾種常用方法 系列2
續上篇 3.autotrace開關 sqlplus中開啟autotrace開關可以得到sql的執行計畫。從提示可以看到autotrace有幾個選項 off on traceonly explain statistics。實驗 1.執行set autotrace on 2.執行set autotrac...