sql_trace相關指令碼

老w愛db發表於2023-09-24

SQL Trace

SQL_TRACE是Oracle提供的用於進行SQL跟蹤的手段,是強有力的輔助診斷工具.在日常的資料庫問題診斷和解決中,SQL_TRACE是非常常用的方法。不過我們這裡主要用於描述SQL的執行過程的trace輸出。
– SQL是如何運算元據的。
– SQL執行過程中產生了那些等待時間。
– SQL執行中消耗了多少資源。
– SQL的實際執行計劃。
– SQL產生的遞迴語句。

10046:

一般來說, 使用 10046 事件得到 sql 執行計劃的步驟如下:
1)啟用當前 session 10046 事件
2)在當前 session 中執行 sql 語句
3)關閉當前 session 10046 事件
按照收集資訊的內容分為以下等級:
1) Level 0: 停用sql跟蹤,相當於SQL_TRACE=FALSE
2) Level 1:標準SQL跟蹤,相當於SQL_TRACE=TRUE
3) Level 4:在level1d的基礎上增加繫結變數的資訊
4) Level 8: 在level1d的基礎上增加等待事件的資訊
5) Level 12: 在level1d的基礎上增加繫結變數和等待事件的資訊
命令如下:
 alter session set events '10046 trace name context forever,level n';
--1、10046跟蹤當前會話  
alter  session set tracefile_identifier='event 10046';
alter  session set events '10046 trace name context forever, level 12';
run  your sql;
alter  session set events '10046 trace name context off';
--2、10046跟蹤其他會話  --獲取相關會話的sid,sieral#後執行以下命令跟蹤  
exec  dbms_system.set_ev(sid,serial#,10046,12,'username');

oradebug檢視SQL_TRACE檔案:

如果會話已經執行了,可以用oradebug
  --1、檢視當前會話trace檔案  oradebug  setmypid  
  oradebug  tracefile_name --檢視trace檔名及位置     
  --2、檢視其他會話trace檔案  select  s.sql_trace,s.sql_trace_waits,s.sql_trace_binds,traceid,tracefile  from  v$session s join v$process p on (p.addr=s.paddr)  where  s.sid=&sid and s.serial#=&serial;     
  --3、解析trace檔案  tkprof  /home/oracle/nwppdb_ora_21793.trc   out.txt aggregate=yes sys=no  waits=yes sort=fchela

systemstate dump:

sqlplus  -prelim / as sysdba  
oradebug  setmypid  
oradebug  unlimit;  
oradebug  dump systemstate 266; 
--wait  for 1 min  
oradebug  dump systemstate 266; 
--wait  for 1 min  
oradebug  dump systemstate 266; 
oradebug  tracefile_name;

Hanganalyze:

oradebug  setmypid  oradebug  unlimit; 
oradebug  dump hanganalyze 3 
--wait  for 1 min  
oradebug  dump hanganalyze 3
--wait  for 1 min  
oradebug  dump hanganalyze 3  
oradebug  tracefile_name;


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

相關文章