1.oracle數據庫的跟蹤和分析方法


1.SQL_TRACE以及10046事件

   最常用的跟蹤方式是通過初始化參數sql_trace或者設置10046事件。 

SQL> show parameter sql_trace;

NAME                     TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sql_trace                 boolean
FALSE

  

    這里可以通過設置sql_trace可以啟動或禁用sql跟蹤工具,設置為true可以收集信息用於性能優化或問題診斷,DBMS_SYSTEM包也可以用於類似功能

  警告:設置該參數為true會嚴重影響性能,因此在產品環境中如非必要,確保不要設置該參數,如果是對特定的session啟動跟蹤,可以使用alter session或者DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION來設置。

  在12c中不再支持sql_trace參數,推薦使用DBMS_MONTTOR和DBMS_SESSION包來替代其功能。而事實上,在DBA工作中,sql_trace很少使用,更多是10046事件。

SQL> alter session set sql_trace=true;   ##開啟跟蹤事件

Session altered.

SQL> select count(*) from dba_users;    

  COUNT(*)
----------
    38

SQL> alter session set sql_trace=false; ##關閉跟蹤事件

Session altered.

SQL> select value from v$diag_info where name='Default Trace File';  ##查看跟蹤事件生成的文件

VALUE
--------------------------------------------------------------------------------
/data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_82172.trc   ##生成的該文件一般用tkprof進行格式化解析

  tkprof + 跟蹤文件   會生成一個新的prf文件,該文件顯示的更加清除明白 

********************************************************************************

SQL ID: aam2chsgpj7mb
Plan Hash: 0
alter session set sql_trace=false
call
count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 0.00 0.00 0 0 0 0 Misses in library cache during parse: 1 Optimizer mode: ALL_ROWS Parsing user id: SYS

   但是很多時候需要跟蹤其他用戶的進程,而不是當前用戶,這里可以通過oracle提供的系統包DBMS_SYSTEM的set_sql_trace_in_session過程來完成。

 通過查詢V$session可以獲取會話中sid,serial#等信息,獲取會話信息之后就可以跟蹤 

select username,sid,serial# from v$session where username is not null
USERNAME            SID    SERIAL#
-------------------- ---------- ----------
SYS                125        311

   設置跟蹤   

SQL> exec dbms_system.set_sql_trace_in_session(123,311,true)   ##這里開啟跟蹤功能
過程時間后在關閉跟蹤 SQL
> exec dbms_system.set_sql_trace_in_session(123,311,false) ##這里關閉跟蹤功能

  以上會生成一個trace文件,然后再用tkprof命令進行格式化解析,最后將解析后的文件打開進行具體分析

   

 

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM