執行計畫生成及檢視的幾種方法

2022-07-26 23:06:14 字數 4096 閱讀 7468

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...