首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle SQL Trace 開啟、Trace 文件定位與 TKPROF 深度分析全流程指南

     編輯:Oracle 資料庫基礎

為何性能測試工程師必須精通 SQL Trace

性能瓶頸 80%+ 源自後台應用與資料庫。Spotlight/Enterprise Manager 發現慢 SQL 後,**Trace + TKPROF 是鐵證**,可量化 Parse/Execute/Fetch 各階段耗時、等待事件、I/O 統計,指導精準優化。

標準開啟流程

  1. sqlplus /nolog → CONN / AS SYSDBA
  2. SHOW PARAMETER sql_trace 確認現狀 (預設 FALSE)。
  3. ALTER SESSION SET SQL_TRACE = TRUE (Session 級) 或 ALTER SYSTEM SET SQL_TRACE = TRUE (全庫,慎用)。
    進階參數:
    TIMED_STATISTICS=TRUE (收集耗時) → MAX_DUMP_FILE_SIZE=UNLIMITED (防截斷) → USER_DUMP_DEST 確認輸出目錄。
  4. 執行目標 SQL / 業務流程。
  5. SHOW PARAMETER user_dump_dest 定位 .trc 檔案 (命名格式 SID_ora_PID.trc)。
  6. ALTER SESSION SET SQL_TRACE = FALSE **立即關閉**,避免持續開銷。
  7. 退出 SQL*Plus。

TKPROF 格式化與分析

基本語法

tkprof input.trc output.txt [EXPLAIN=user/pass] [TABLE=schema.temp_table] [SYS=NO] [SORT=EXEELA]

關鍵參數:

  • EXPLAIN:在輸出中附帶執行計畫。
  • TABLE:指定暫存表用於 EXPLAIN PLAN,避免污染業務表。
  • SYS=NO:過濾 SYS 遞迴 SQL,聚焦應用 SQL。
  • SORT:排序欄位,常用 EXEELA (執行經過時間降序)、FCHELA (Fetch 經過時間)、PRSELA (解析經過時間)。

輸出關鍵欄位解讀

實戰分析步驟

  1. 按 ELAPSED 排序,鎖定 Top SQL。
  2. 檢視 ROW SOURCE OPERATION (啟用 EXPLAIN 後產出) 確認執行計畫、實際行數 vs 預估行數。
  3. 關注 WAIT EVENTS 區段:db file sequential read (索引單塊讀)、db file scattered read (全掃多塊讀)、log file sync (Commit 等待) 等。
  4. 對比 QUERY vs DISK 判斷緩衝區命中率;CURRENT 高提示 DML 熱點。

補充:10046 Event 等級對照

  • Level 1:標準 Trace (同 SQL_TRACE=TRUE)。
  • Level 4:+ 綁定變數值。
  • Level 8:+ 等待事件。
  • Level 12:Level 4 + 8 (最常用,含綁定值與等待)。

啟用方式:ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12' 或 DBMS_MONITOR.SESSION_TRACE_ENABLE(waits=>TRUE, binds=>TRUE) (10g+ 推薦)。

最佳實踐提醒

  • **僅在專用連接** 追蹤,共用伺服器 Trace 內容混雜難分析。
  • 生產環境**極謹慎**開啟系統級 Trace,優先用 Session 級或 DBMS_MONITOR 精準鎖定 SID。
  • 定期清理 USER_DUMP_DEST 避免磁碟爆滿。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
欄位含義
COUNTOCI 呼叫次數 (Parse/Execute/Fetch)
CPUCPU 耗時 (秒)
ELAPSED牆鐘時間 (秒) = 用戶響應時間
DISK物理讀區塊數
QUERY一致性獲取 (邏輯讀)
CURRENT當前模式獲取 (DML 相關)
ROWS處理行數