SQLTrace

--========================

--  Sql Trace

--========================

 

一、用戶進程跟蹤文件

    用戶跟蹤文件在根據需要跟蹤會話實際操作的時候根據要求產生

    通常用於幫助調整應用程序,比如檢查由SQL的不良寫法所致的相關問題等等

    由用戶進程發出,服務器進程產生該類文件

    包含跟蹤SQL命令的統計信息、包含用戶的錯誤信息

    缺省情況下當用戶出現會話錯誤時產生

    位置由user_dump_dest設定

    文件大小由max_dump_file_size 決定

    可以設定記錄會話的所有信息

    分爲基於會話級別和基於實例級別,大多數情況下,在session級別進行跟蹤

 

二、不同級別的跟蹤 

    instance level:

        alter system set sql_trace = true;

       

    session level:

        使用alter session命令啓用跟蹤

        alter session set sql_trace = true;

        使用dbms包來啓用跟蹤

        dbms_system.SET_SQL_TRACE_IN_SESSION

 

三:

10053 trace跟蹤文件

可以通過alter session set event 來創建,但是前提是這條SQL被真正執行過。

常見創建方法:

alter session set tracefile_identifier='mytrace';

alter session set events '10053 trace name context forever';

select * from emp where ename='scott';

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

到了11g 對於10053有了優化,所以以上創建方法還可以是:

alter session set tracefile_identifier='mytrace'; 創建trace標識符

alter session set events 'trace [sql_compiler.*]';

select * from emp where name='scott';

alter session set events 'trace [sql_compiler.*] off'; 退出10053 trace.

但是有的場景是不允許你執行sql的,比如sql是修改數據的,或者sql很大對性能有影響,或者沒有執行權限。這個時候我們可以使用dbms_sqldiag.dump_trace來實現,具體方法如下:

begin

dbms_sqldoag.dump_trace(p_sql_id=>'',

p_child_number=>0,

p_component=>'compiler',

p_file_id=>'mytrace');

end;

/

但是注意的是每次執行 dbms_sqldoag.dump_trace都會觸發一此硬解析,因此不能再繁忙期或者頻繁的執行。

 

 

方法1:10046事件

可以明確顯示目標SQL的實際執行中每一個執行步驟所消耗的邏輯度,物理度和花費時間

激活10046事件:

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

oradebug event 10046 trace name context forevel,level 12

 

在此session中執行sql

得到trace 文件路徑

oradebug tracefile_name

關閉10046事件

alter session set events ' 10046 trace name context off'

oradebug event 10046 trace name context off

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章