會話的跟蹤以及執行計劃的獲取
在DBA診斷方法中,會話的跟蹤是比較重要的一個部分。如何獲取會話或者某些DML程式碼的執行計劃成為SQL優化重要工具,下面是日常常用3三種跟蹤方法,以及一些工具的使用。
1、AUTOTRACE功能
適用:當前會話跟蹤,當前螢幕輸出。
功能:檢視執行查詢的執行計劃和佔用的資源,使用的比較頻繁。
SET AUTOTRACE OFF -- 不生成AUTOTRACE 報告,這是預設模式
SET AUTOTRACE ON EXPLAIN -- AUTOTRACE只顯示優化器執行路徑報告
SET AUTOTRACE ON STATISTICS -- 只顯示執行統計資訊
SET AUTOTRACE ON -- 包含執行計劃和統計資訊
SET AUTOTRACE TRACEONLY -- 同set autotrace on,但是不顯示查詢輸出
2、SQL_TRACE(Oracle的輔助診斷工具)
(1)全域性使用
在pfile/spfile引數檔案中指定: sql_trace =true
SQL> alter system set sql_trace = true;
說明:全域性開啟SQL_TRACE會導致所有程式被跟蹤,包括後臺程式及所有使用者程式,會導致比較嚴重的效能問題,所以最好不要開啟此功能,預設關閉。
(2)當前會話使用:
SQL> alter session set timed_statistics = true;
SQL> alter session set sql_trace = true;
SQL>執行你的程式碼
SQL> alter session set sql_trace = false;
SQL> @gettrcname
(3)跟蹤其他使用者程式:
使用包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION進行跟蹤,
前提是需要手動找到會話的sid,serial#,這個方法就不多陳述了。
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true)
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false)
SQL> @gettrcname
3、10046事件
10046事件是Oracle提供的內部事件,是對SQL_TRACE的增強.
10046事件可以設定以下四個級別:
1 -- 啟用標準的SQL_TRACE功能,等價於sql_trace
4 -- Level 1 + 繫結值(bind values)
8 -- Level 1 + 等待事件跟蹤
12 -- Level 1 + Level 4 + Level 8
(1)全域性設定。
引數檔案中新增:event="10046 trace name context forever,level 12"
(2)對當前session設定。
SQL> alter session set events '10046 trace name context forever';
SQL> alter session set events '10046 trace name context forever, level 8';
SQL>執行你的程式碼
SQL> alter session set events '10046 trace name context off';
SQL> @gettrcname
(3)對其他使用者session設定(呼叫DBMS_SYSTEM.SET_EV系統包):。
SQL> exec dbms_system.set_ev(sid,serial#,10046,8,'user');
SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'user');
SQL> @gettrcname
4、TKPROF 進行格式化。
跟蹤完後使用TKPROF命令進行檔案的格式化。
tkprof
5、runstats
tom kyte寫的測試工具用於比較程式碼執行計劃的異同。
有興趣的朋友可以下載程式碼下來嘗試一下。
附:linux下gettrcname程式碼
SELECT a.VALUE
^X\t"T#b1Ep^#RK24070945 || b.symbol
U Y}I}ja,B1N*qa\G24070945 || c.instance_nameITPUB個人空間r7w!W P K q
|| '_ora_'
Ocg5^ NG)G;QFbZ24070945 || d.spidITPUB個人空間 a*Az}L
|| '.trc' trace_fileITPUB個人空間(r.H a"@@ {
FROM (SELECT VALUEITPUB個人空間;dd:]j(L i8e
FROM v$parameter
0gc1b/Ut24070945 WHERE NAME = 'user_dump_dest') a,
1A8T w2y9q24070945 (SELECT SUBSTR (VALUE, -6, 1) symbolITPUB個人空間H0wV"A/j:bL
FROM v$parameterITPUB個人空間+DT*Ci)l8J v
WHERE NAME = 'user_dump_dest') b,
N GPa.Q(o24070945 (SELECT instance_nameITPUB個人空間.RnA:S[2cKh
FROM v$instance) c,ITPUB個人空間&Li.y;X M bGoh
(SELECT spid
2j g)a6X#j6_d24070945 FROM v$session s, v$process p, v$mystat m
,j*M,s1i2|y:K+e9K24070945 WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d;ITPUB個人空間S,u@U/_M7[!J
1、AUTOTRACE功能
適用:當前會話跟蹤,當前螢幕輸出。
功能:檢視執行查詢的執行計劃和佔用的資源,使用的比較頻繁。
SET AUTOTRACE OFF -- 不生成AUTOTRACE 報告,這是預設模式
SET AUTOTRACE ON EXPLAIN -- AUTOTRACE只顯示優化器執行路徑報告
SET AUTOTRACE ON STATISTICS -- 只顯示執行統計資訊
SET AUTOTRACE ON -- 包含執行計劃和統計資訊
SET AUTOTRACE TRACEONLY -- 同set autotrace on,但是不顯示查詢輸出
2、SQL_TRACE(Oracle的輔助診斷工具)
(1)全域性使用
在pfile/spfile引數檔案中指定: sql_trace =true
SQL> alter system set sql_trace = true;
說明:全域性開啟SQL_TRACE會導致所有程式被跟蹤,包括後臺程式及所有使用者程式,會導致比較嚴重的效能問題,所以最好不要開啟此功能,預設關閉。
(2)當前會話使用:
SQL> alter session set timed_statistics = true;
SQL> alter session set sql_trace = true;
SQL>執行你的程式碼
SQL> alter session set sql_trace = false;
SQL> @gettrcname
(3)跟蹤其他使用者程式:
使用包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION進行跟蹤,
前提是需要手動找到會話的sid,serial#,這個方法就不多陳述了。
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true)
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false)
SQL> @gettrcname
3、10046事件
10046事件是Oracle提供的內部事件,是對SQL_TRACE的增強.
10046事件可以設定以下四個級別:
1 -- 啟用標準的SQL_TRACE功能,等價於sql_trace
4 -- Level 1 + 繫結值(bind values)
8 -- Level 1 + 等待事件跟蹤
12 -- Level 1 + Level 4 + Level 8
(1)全域性設定。
引數檔案中新增:event="10046 trace name context forever,level 12"
(2)對當前session設定。
SQL> alter session set events '10046 trace name context forever';
SQL> alter session set events '10046 trace name context forever, level 8';
SQL>執行你的程式碼
SQL> alter session set events '10046 trace name context off';
SQL> @gettrcname
(3)對其他使用者session設定(呼叫DBMS_SYSTEM.SET_EV系統包):。
SQL> exec dbms_system.set_ev(sid,serial#,10046,8,'user');
SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'user');
SQL> @gettrcname
4、TKPROF 進行格式化。
跟蹤完後使用TKPROF命令進行檔案的格式化。
tkprof
5、runstats
tom kyte寫的測試工具用於比較程式碼執行計劃的異同。
有興趣的朋友可以下載程式碼下來嘗試一下。
附:linux下gettrcname程式碼
SELECT a.VALUE
^X\t"T#b1Ep^#RK24070945 || b.symbol
U Y}I}ja,B1N*qa\G24070945 || c.instance_nameITPUB個人空間r7w!W P K q
|| '_ora_'
Ocg5^ NG)G;QFbZ24070945 || d.spidITPUB個人空間 a*Az}L
|| '.trc' trace_fileITPUB個人空間(r.H a"@@ {
FROM (SELECT VALUEITPUB個人空間;dd:]j(L i8e
FROM v$parameter
0gc1b/Ut24070945 WHERE NAME = 'user_dump_dest') a,
1A8T w2y9q24070945 (SELECT SUBSTR (VALUE, -6, 1) symbolITPUB個人空間H0wV"A/j:bL
FROM v$parameterITPUB個人空間+DT*Ci)l8J v
WHERE NAME = 'user_dump_dest') b,
N GPa.Q(o24070945 (SELECT instance_nameITPUB個人空間.RnA:S[2cKh
FROM v$instance) c,ITPUB個人空間&Li.y;X M bGoh
(SELECT spid
2j g)a6X#j6_d24070945 FROM v$session s, v$process p, v$mystat m
,j*M,s1i2|y:K+e9K24070945 WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d;ITPUB個人空間S,u@U/_M7[!J
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24070945/viewspace-702223/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 獲取執行計劃的方法
- 執行計劃-1:獲取執行計劃
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle獲取執行計劃的方法Oracle
- 獲取SQL執行計劃的方式:SQL
- 獲取SQL執行計劃SQL
- Oracle跟蹤會話Oracle會話
- 使用SQL_TEACE的跟蹤檔案分析執行計劃SQL
- 如何獲取真實的執行計劃
- 獲取執行計劃的6種方法
- 【sql調優之執行計劃】獲取執行計劃SQL
- -t【Oracle-故障管理】-Trace跟蹤會話和會話執行慢故障分析Oracle會話
- 使用10046事件跟蹤分析執行計劃事件
- 獲取執行計劃之Autotrace
- Oracle 獲取執行計劃的幾種方法Oracle
- 會話跟蹤技術會話
- 給會話開跟蹤會話
- oracle session(會話) 跟蹤OracleSession會話
- 會話級SQL跟蹤會話SQL
- Oracle 獲取SQL執行計劃方法OracleSQL
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- 會話跟蹤技術Cookieless會話Cookie
- oracle dbms_xplan獲取執行計劃Oracle
- oracle中跟蹤sql執行計劃的方法OracleSQL
- 獲取跟蹤檔案位置
- 獲取跟蹤檔案_eygle
- 用Oracle跟蹤診斷掛起的會話Oracle會話
- 10046 跟蹤其他會話會話
- 介紹幾種獲取SQL執行計劃的方法(上)SQL
- Oracle10g如何獲取執行計劃Oracle
- 跟蹤客戶端執行的SQL客戶端SQL
- 使用sqltrace跟蹤session執行的sqlSQLSession
- 跟蹤執行命令T
- 10046事件跟蹤會話sql事件會話SQL
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- Oracle檢視正在執行的SQL以及執行計劃分析OracleSQL
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話