10046 是 Oracle 內部診斷事件,俗稱「SQL Trace」。啟用後會生成 Trace 文件,記錄解析、綁定、執行、獲取、等待等全生命周期信息,是**單條 SQL 性能分析**的黃金標準。若是整體性能下降,請用 AWR/Statspack。
| 參數 | 建議值 | 作用 |
|---|---|---|
| TIMED_STATISTICS | TRUE | 記錄耗時統計 (微秒級) |
| MAX_DUMP_FILE_SIZE | UNLIMITED | 防止 Trace 文件被截斷 |
| USER_DUMP_DEST | 自動 (ADR) | Trace 文件目錄 (11g+ 由 ADR 控制) |
| STATISTICS_LEVEL | TYPICAL 或 ALL | 統計收集級別,ALL 最全但開銷大 |
| TRACEFILE_IDENTIFIER | 自定義標識 | 便於在目錄中快速定位文件 (僅會話級) |
ALTER SESSION SET TIMED_STATISTICS = TRUE; ALTER SESSION SET MAX_DUMP_FILE_SIZE = UNLIMITED; ALTER SESSION SET TRACEFILE_IDENTIFIER = 'my_trace_tag';
| Level | 含義 | 適用場景 |
|---|---|---|
| 0 | 禁用 | 關閉追蹤 |
| 1 | 基礎 SQL Trace | 解析、執行、獲取、執行計劃 (等同 SQL_TRACE=TRUE) |
| 4 | Level 1 + 綁定變量 | 需分析綁定變量窺探、數據類型轉換 |
| 8 | Level 1 + 等待事件 | 需分析 I/O、鎖、鎖等待、網絡等待 |
| 12 | Level 4 + 8 (最全) | **深度調優首選**,含綁定+等待+計劃 |
ALTER SESSION SET TRACEFILE_IDENTIFIER = '10046_test'; ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
SELECT code, name, parent_code, connect_by_isleaf, lev FROM ghsj_xm.v_organdataset WHERE level = 1 CONNECT BY PRIOR code = parent_code START WITH code = '14142' ORDER SIBLINGS BY code;
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';
方法一:ADR 目錄下 grep
cd $ADR_BASE/diag/rdbms// /trace ls | grep 10046_test
方法二:查詢 V$PROCESS/V$SESSION
SELECT tracefile FROM v$process WHERE addr = (SELECT paddr FROM v$session WHERE sid = (SELECT sid FROM v$mystat WHERE rownum=1));
tkprofSYS=NO SORT=EXEELA,PRSELA
關鍵排序選項:EXEELA (執行耗時)、FCHELA (獲取耗時)、PRSELA (解析耗時)、EXEDSK (執行物理讀)。
| 欄位 | 含義 |
|---|---|
| COUNT | 調用次數 (PARSE/EXEC/FETCH) |
| CPU | CPU 時間 (秒) |
| ELAPSED | 經過時間 (秒) |
| DISK | 物理讀塊數 |
| QUERY | 一致性讀塊數 (邏輯讀) |
| CURRENT | 當前模式讀塊數 (通常為 DML) |
| ROWS | 處理行數 |
TKPROF 末尾列出 Elapsed times include waiting on following events,重點關注:
db file sequential/scattered read — 索引/全表掃描 I/Olog file sync — 提交等待 Redo 寫入enq: TX - row lock contention — 行鎖競爭SQL*Net message from client — 客戶端思考時間 (通常可忽略)DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id, serial_num, TRUE, TRUE) (需 DBA 權限)ALTER SYSTEM SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; — 極度謹慎,會產生海量文件,僅用於無法復現的極難問題。MAX_DUMP_FILE_SIZE=UNLIMITED 並監控磁盤空間。SYS=YES 可看但通常噪音大。10046 + TKPROF 是 Oracle 單 SQL 調優的「核磁共振」。熟練掌握 參數設置 → 等級選擇 → 文件定位 → TKPROF 參數 → 讀懂 CPU/ELAPSED/DISK/QUERY/WAITS 全鏈路,是高級 DBA/開發的核心基本功。