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

Oracle SQL 執行計劃捕獲與分析完整指南:從 SQL Trace 到 V$SQL_PLAN

     編輯:Oracle 資料庫基礎

SQL 調優標準流程

  1. 捕獲目標 SQL
  2. 產生執行計劃
  3. 驗證統計資訊(表分析狀態、索引、資料分布)
  4. 構想理想執行計劃
  5. 已分析表 → 重新收集統計或建立直方圖
  6. 未分析表 → 嘗試 Hint 引導優化器
  7. 無法調優時 → 開啟 10053 事件追蹤優化器決策邏輯

SQL 捕獲四大來源

執行計劃查看四種方式

1. AUTOTRACE(SQL*Plus 內建)

SET AUTOTRACE ON              -- 執行並顯示計劃+統計
SET AUTOTRACE TRACEONLY EXPLAIN -- 僅顯示計劃不執行

2. EXPLAIN PLAN + UTLXPLS

EXPLAIN PLAN FOR SELECT ... FROM ...;
@?/rdbms/admin/utlxpls.sql

3. V$SQL_PLAN 即時查詢(推薦生產環境)

COLUMN operation FORMAT A16
COLUMN "Query Plan" FORMAT A60
COLUMN options FORMAT A15
COLUMN object_name FORMAT A20
COLUMN id FORMAT 99

SELECT id,
       LPAD(' ', 2*(level-1)) || operation || ' ' || options || ' ' || object_name ||
       DECODE(id, 0, ' Cost = ' || position) "Query Plan"
FROM (SELECT * FROM v$sql_plan WHERE address = '&addr') sql_plan
START WITH id = 0
CONNECT BY PRIOR id = parent_id;

優點:無需執行權限、即時反映共享游標實際計劃、可查歷史計劃變更。

4. 第三方工具

  • PL/SQL Developer:圖形化計劃、成本分析
  • TOAD:進階調優顧問、計劃比較
  • Oracle SQL Developer:免費、整合資料庫管理

關鍵計劃操作解讀

方法適用場景特點
SQL Trace / 10046 Event特定模組/Session 深度分析完整等待事件、Bind 變數、行數統計
Statspack / AWR全庫高負載 SQL 識別歷史趨勢、Top SQL 排行、自動收集
V$SQL / V$SQLAREA即時進行中 SQL共享游標統計、執行計劃快照
V$SESSION_WAIT阻塞/等待分析實時等待事件、阻塞鏈

10053 事件開啟優化器追蹤

ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL 1';
-- 執行目標 SQL
ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT OFF';
-- 追蹤檔位於 USER_DUMP_DEST,檢視優化器決策樹
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作含義調優方向
TABLE ACCESS FULL全表掃描考慮索引、分區裁剪
INDEX UNIQUE SCAN唯一索引單值查找最佳存取路徑
INDEX RANGE SCAN索引範圍掃描檢視範圍選擇率
NESTED LOOPS巢狀迴圈聯結驅動表小、內表有索引
HASH JOIN雜湊聯結大表聯結、無索引
SORT ORDER BY排序操作檢視 PGA/SORT_AREA_SIZE