天天看點

使用SQL_Trace和10046事件進行資料庫診斷

使用SQL_Trace和10046事件進行資料庫診斷步驟:

1.

利用top指令找到目前占用cpu資源最高的一個資料庫程序的PID。

2. 在資料庫中根據PID号找到相應的SID号和SERIAL#

select s.sid,

s.serial# from v$session s, v$process p where s.paddr=p.addr and

p.spid=‘[PID]‘;

或select sid,

serial#, username from v$session where username is not null;

3.

使用dbms_system.set_sql_trace_in_session包來對這個session進行trace

exec

dbms_system.set_sql_trace_in_session([SID],[SERIAL#],true);

需要sysdba權限

4.

找到生成的trace檔案,預設在$Oracle_base/admin/[SID]/[SID]/updump中,也可以用下面語句查詢位置和名稱:

  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

s.paddr=p.addr)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 $parameter where

name=‘user_dump_dest‘) d;

  檢視路徑:show parameter

user_dump_dest;

5. 用TKPROF對trace檔案格式化:

tkprof

test.trc output.txt explain=[username]/[pwd] aggregate=yes sys=no waits=yes

sort=fchela;

使用SQL_Trace和10046事件進行資料庫診斷
使用SQL_Trace和10046事件進行資料庫診斷

遞歸SQL:當發出一條簡單的sql指令後,Oracle資料庫要在背景解析這條指令,并轉換為Oracle資料庫的一系列背景操作,這些背景操作被稱為遞歸sql。

查詢表結構資訊: select index_name, table_name,

column_name from user_ind_columns where table_name=upper(‘test‘);