使用10046跟蹤sql語句

suifeng2316發表於2013-05-29
--1. 在全域性設定
在引數檔案中增加:
event="10046 trace name context forever,level 12" 
此設定對所有使用者的所有程式生效、包括後臺程式.(基本不用,會消耗大量系統資源)
--2. 對當前session設定
通過alter session的方式修改,需要alter session的系統許可權: 
SQL> alter session set events '10046 trace name context forever,level n';
level 1等同於sql_trace的功能
level 4在level 1的基礎上增加了繫結變數的資訊
level 8在level 1的基礎上增加等待事件的資訊
level 12等於level 4+level 8,即同事收集繫結變數和等待事件
設定跟蹤檔案標示符
alter session set tracefile_identifier=xxx.trc;
檔案生成目錄
在Oracle 10g中,SQL_TRACE生成的trace檔案預設路徑是:$ORACLE_BASE/admin/SID/udump.  
到了11g,trace 預設路徑在:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace目錄下. 
select * from v$diag_info;
使用10046 事件跟蹤其他會話
 開啟:exec dbms_monitor.session_trace_enable(1036,8989,waits=>true,binds=>true); 
 關閉:exec dbms_monitor.session_trace_disable(1036,8989); 
開啟:exec sys.dbms_system.set_sql_trace_in_session(1036,8989,true); 
關閉:exec sys.dbms_system.set_sql_trace_in_session(1036,8989,false);
1,SET AUTO TRACE (EXPLAIN PLAN)
--輸出優化器的產生的執行計劃(估算值)
2,SQL_TRACE
– SQL實際的執行情況
• 消耗的資源
• 產生的等待事件
• 資料的處理過程
trace檔案詳解
--parsing in cursor 部分
len  =========>被分析sql的長度
dep  =========>產生遞迴sql的深度
uid  =========>user id
otc  =========> oracle command type命令型別
lid  =========>私有使用者的id
tim  =========>時間戳
hv  =========> hash value
ad  =========>sql address
--stats 部分
id  =========>執行計劃的行源號
cnt  =========>當前執行返回的行數
pid  =========>當前行源號的父號
obj  =========>當前操作的物件id
op  =========>當前行源的資料訪問操作
--parse, exec, fetch部分
c   =========>消耗的cpu時間
e  =========>elapesd time的操作的用時
p  =========>physical reads物理讀的次數
cr  =========>consistent reads一致性方式讀取的資料塊
cu  =========>current方式讀取的資料塊
mis  =========>cursor miss incache硬分析的次數
r  =========>rows處理的行數
dep  =========>depth遞迴sql的深度
og  =========>optimizer goal優化器模式
tim  =========>timestamp 時間戳
注意:
如果sql語句使用dblink,則無法跟蹤到遠端機器的trace資訊。
當sql語句出現效能問題時,可以採取10046事件跟蹤。如果是資料庫效能遇到瓶頸則採取awr報告進行分析。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23073818/viewspace-762370/,如需轉載,請註明出處,否則將追究法律責任。

相關文章