首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle SQL 追蹤實戰:10046 事件、DBMS_MONITOR、TRCSESS 與 TKPROF 全鏈路

     編輯:Oracle 資料庫相關知識

一、會話級啟用追蹤(可修改應用代碼場景)

ALTER SESSION SET TIMED_STATISTICS = TRUE;
ALTER SESSION SET MAX_DUMP_FILE_SIZE = UNLIMITED;
ALTER SESSION SET TRACEFILE_IDENTIFIER = 'POX20240115';
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
-- 業務代碼執行區間
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

Level 解析:0=關閉、1=基礎、4=+綁定變量、8=+等待事件、12=1+4+8(推薦)。

二、遠程會話啟用追蹤(不可修改應用場景)

方法 1:DBMS_MONITOR(10g+ 推薦)

EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(
  session_id => :sid, serial_num => :serial,
  waits => TRUE, binds => FALSE);
-- 業務運行
EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE(:sid, :serial);

方法 2:DBMS_SYSTEM.SET_EV(兼容舊版)

EXEC SYS.DBMS_SYSTEM.SET_EV(:sid, :serial, 10046, 8, '');
-- 業務運行
EXEC SYS.DBMS_SYSTEM.SET_EV(:sid, :serial, 10046, 0, '');

獲取 SID/SERIAL#

SELECT sid, serial#, username, program FROM v$session WHERE ...;

三、追蹤文件定位

  • 目錄:USER_DUMP_DEST 或 DIAGNOSTIC_DEST/trace;
  • 文件名包含:TRACEFILE_IDENTIFIER + SPID(OS 進程號);
  • 關聯查詢:
    SELECT p.spid FROM v$process p, v$session s WHERE p.addr = s.paddr AND s.sid = :sid AND s.serial# = :serial;

四、共享服務器/連接池場景:TRCSESS 合併追蹤

trcsess output=merged.trc session=123.456 *.trc
-- 或按模塊名
trcsess output=merged.trc module='ORDER_ENTRY' *.trc

將分散在多個共享服務器進程的追蹤文件合併為單一文件,便於分析。

五、TKPROF 格式化分析

tkprof merged.trc merged.txt EXPLAIN=user/pass SYS=NO SORT=EXEELA,FCHELA

關鍵輸出欄位:

欄位含義
PARSE解析次數/CPU/經過時間
EXEC執行次數/CPU/經過時間/行數
FETCH提取次數/CPU/經過時間/行數
WAIT等待事件統計

六、最佳實踐清單

  1. 生產環境極謹慎開啟 Level 12,優先 Level 8(無綁定變量);
  2. 設置 MAX_DUMP_FILE_SIZE 防止截斷;
  3. 使用 TRACEFILE_IDENTIFIER 快速定位;
  4. 追蹤結束後立即關閉,避免磁盤寫滿;
  5. 定期清理舊追蹤文件,納入維護腳本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved