承接上篇,本文說明啟動追蹤、收集資料、關閉追蹤,以及使用 tkprof 格式化追蹤檔產生分析報表的完整操作。
EXEC sys.dbms_system.set_sql_trace_in_session(8, 3, TRUE);
注意: 只有目標 Session 再次發出 SQL 陳述式 後,才會在 user_dump_dest 目錄產生 .trc 追蹤檔。
讓目標應用程式正常運作一段時間(視業務量而定,建議涵蓋完整業務週期),確保追蹤檔包含代表性 SQL。
EXEC sys.dbms_system.set_sql_trace_in_session(8, 3, FALSE);
在作業系統命令列執行 tkprof:
tkprof dsdb2_ora_18468.trc dsdb2_trace.out SYS=NO EXPLAIN=SCOTT/TIGER
參數說明:
dsdb2_ora_18468.trc:輸入追蹤檔名稱(含路徑)。dsdb2_trace.out:輸出報表檔名。SYS=NO:略過 SYS 使用者的遞迴 SQL。EXPLAIN=SCOTT/TIGER:連線資料庫產生執行計畫(需有權限)。| 指令 | 用途 |
|---|---|
tkprof tracefile.trc sort_1.prf EXPLAIN=apps/pwd PRINT=10 SORT='(PRSQRY,EXEQRY,FCHQRY,PRSCU,EXECU,FCHCU)' | 依查詢/執行/擷取階段 CPU+Elapsed 排序,顯示前 10 筆 |
tkprof tracefile.trc sort_2.prf EXPLAIN=apps/pwd PRINT=10 SORT='(PRSELA,EXEELA,FCHELA)' | 依 Elapsed 時間排序 |
tkprof tracefile.trc sort_3.prf EXPLAIN=apps/pwd PRINT=10 SORT='(PRSCNT,EXECNT,FCHCNT)' | 依呼叫次數排序 |
tkprof tracefile.trc normal.prf EXPLAIN=apps/pwd | 預設格式報表 |
報表關鍵指標: PARSE(解析)、EXEC(執行)、FETCH(擷取)的 CPU、ELAPSED、DISK(物理讀)、QUERY(邏輯讀)、CURRENT(當前模式讀)、ROWS(處理列數)。重點關注高 ELAPSED、高 DISK、高 QUERY 的 SQL 進行索引優化或 SQL 改寫。