1. 程式人生 > 其它 >1.oracle資料庫的跟蹤和分析方法

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命令進行格式化解析,最後將解析後的檔案開啟進行具體分析