SQL效能的度量 - 利用10046事件擴充套件SQL跟蹤

llnnmc發表於2018-01-20

在會話sql_trace的基礎上,利用10046診斷事件,可以擴充套件sql_trace的功能,主要體現在對繫結變數和等待事件的跟蹤上。


10046診斷事件可以設定的四個級別:

level 1

啟用標準的SQL跟蹤,等價於sql_trace

level 4

level 1 + 繫結變數資訊

level 8

level 1 + 等待事件資訊

level 12

level 1 + level 4 + level 8


啟用自己會話的10046事件跟蹤

alter session set events '10046 trace name context forever,level 12';


關閉10046事件跟蹤

alter session set events '10046 trace name context off';


設定對指定會話的跟蹤,有以下幾種方法:


1、透過程式包dbms_monitor

開啟跟蹤

exec dbms_monitor.session_trace_enable(, , waits => true, binds => true);

關閉跟蹤

exec dbms_monitor.session_trace_disable(, );


2、透過程式包dbms_system

開啟跟蹤

exec dbms_system.set_ev(, , 10046, 12, '');

關閉跟蹤

exec dbms_system.set_ev(, , 10046, 0, '');


3、透過oradebug

開啟跟蹤

oradebug setorapid ; oradebug setospid ;

oradebug session_event 10046 trace name context forever, level 12;

確定跟蹤檔案路徑

oradebug tracefile_name;

關閉跟蹤

oradebug event 10046 trace name context off;


當前會話的事件編號及其級別,可以用以下程式碼獲取

set serveroutput on

declare

event_level number;

begin

    for event_number in 10000 .. 10999 loop

        dbms_system.read_ev(event_number, event_level);

        if (event_level > 0) then

            dbms_output.put_line('Event ' || to_char(event_number) ||

                                 ' is set at level ' ||

                                 to_char(event_level));

        end if;

    end loop;

end;

/

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

相關文章