無論開發 DBA 或維運 DBA,SQL 效能調優核心技能即是「看懂執行計畫」。本文整理三種最常用、最實用的查看方法。
EXPLAIN PLAN FOR
SELECT sysdate FROM dual;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | TABLE ACCESS FULL| DUAL | | | |
--------------------------------------------------------------------
Note: rule based optimization
DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ADVANCED'):顯示 Outline、Projection、Predicate 等詳細資訊DBMS_XPLAN.DISPLAY_CURSOR(sql_id, child_number, 'ALLSTATS LAST'):查看**實際執行統計** (A-Rows、A-Time、Buffers),需啟用 STATISTICS_LEVEL=ALL 或 Hint /*+ GATHER_PLAN_STATISTICS */EXPLAIN PLAN SET STATEMENT_ID = 'my_test' FOR ...系統整體效能不佳時,追蹤 Session 產生 Trace 檔,用 TKPROF 排序找出問題 SQL。
ALTER SESSION SET SQL_TRACE = TRUE;
-- 或指定 Session:EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid, serial#, TRUE);
ALTER SESSION SET TRACEFILE_IDENTIFIER = 'yourname';
tkprof /oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc \
/oracle/yourname.txt \
EXPLAIN=user/pwd \
AGGREGATE=YES \
SYS=NO \
WAITS=YES \
SORT=FCHELA
關鍵參數:SORT=FCHELA 依 Fetch/CPU/Elapsed 排序,快速定位高耗 SQL
ALTER SESSION SET SQL_TRACE = FALSE;| 欄位 | 含義 |
|---|---|
| COUNT | 執行次數 |
| CPU | CPU 時間 (秒) |
| ELAPSED | 經過時間 (秒) |
| DISK | 實體讀取區塊數 |
| QUERY | 一致性讀取 (Logical Reads) |
| CURRENT | 目前模式讀取 |
| ROWS | 處理列數 |
SET AUTOTRACE ON EXPLAIN STATISTICS
-- 或
SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS -- 不顯示查詢結果
| 維度 | EXPLAIN PLAN | TKPROF | AUTOTRACE |
|---|---|---|---|
| 適用階段 | 開發/測試階段單條 SQL | 生產/測試整體負載分析 | 互動式快速驗證 |
| 實際執行統計 | 無 (僅估算) | 有 (真實 Trace) | 有 (當次執行) |
| 權限需求 | 低 | 高 (需 OS 存取 Trace 目錄) | 低 |
| 推薦場景 | SQL 調優迭代、驗證 Hint 效果 | 系統級效能基線、找出 Top SQL | 臨時查詢、教學示範 |