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

Oracle SQL 效能調優全方法論:問題識別、優化器模式、執行計劃解讀與連接機制深度解析

     編輯:Oracle 資料庫基礎

一、四大問題 SQL 識別管道

  1. 用戶回報:測試組/終端用戶反饋響應緩慢。
  2. V$SQLAREA 掃描:聚焦高 DISK_READS、高 BUFFER_GETS、高 EXECUTIONS、高 SHARABLE_MEM 的語句。
    關鍵欄位:SQL_TEXT, COMMAND_TYPE (3=SELECT, 6=UPDATE, 7=DELETE, 47=PL/SQL), OPTIMIZER_MODE。
  3. Session 監控:Enterprise Manager/Grid Control 觀察長時間運行 Session (沙漏圖示)。
  4. SQL Trace + TKPROF:
    ALTER SESSION SET SQL_TRACE=TRUE; → 執行 SQL → FALSE → TKPROF 格式化。
    分析重點:PARSE 高 → 擴大 Shared Pool;QUERY/CURRENT 高 → 缺索引或連接順序不佳;DISK 高 → 索引可改善;LIBRARY CACHE MISS 多 → 擴大 Shared Pool。

二、優化器模式選擇策略

生產環境建議:實例級設 ALL_ROWS,會話/語句級用 Hint /*+ FIRST_ROWS(10) */ 覆蓋互動查詢。

三、執行計劃核心訪問路徑解讀

1. 全表掃描

觸發:無可用索引、大量資料回收 (>5-10%)、小表、Hint 強制、HWM 掃描。TABLE ACCESS FULL。

2. 索引掃描六大類型

  • Unique Scan:唯一索引等值查找,返回 0/1 行。
  • Range Scan:範圍條件 (<, >, BETWEEN, LIKE 'abc%')。
  • Range Scan Descending:ORDER BY DESC 避免排序。
  • Skip Scan:複合索引前導欄未用、基數低時跳躍掃描。
  • Full Scan:掃描所有葉塊 (索引包含所有查詢欄位)。
  • Fast Full Scan:多區塊 I/O 掃描索引段,無序,類似全表掃描但更窄。
  • Index Join:多個單欄索引位圖/雜湊合併模擬覆蓋索引。
  • Bitmap Join:星型模式維度表位圖索引連接。

3. CBO 訪問路徑選擇邏輯

  1. 檢查 WHERE/FROM 子句,列舉所有可行路徑。
  2. 依統計資訊計算各路徑成本 (CPU + I/O)。
  3. 選擇成本最低路徑。

四、三大表連接機制深度對比

模式行為適用場景
CHOOSE有統計用 CBO (目標最佳吞吐),無統計用 RBO混合環境過渡期 (已棄用)
ALL_ROWS全 CBO,目標最佳吞吐量批次、報表、數倉、非即時查詢
FIRST_ROWS_n全 CBO,目標前 N 行最佳響應 (1/10/100/1000)Web 分頁、互動式查詢、OLTP
FIRST_ROWSCBO + 啟發式,快速返回首批行向後相容
RULE純 RBO (已棄用)極少數舊系統相容
機制原理優勢場景劣勢/風險
Nested Loops (NL)外表驅動,逐行探測內表 (索引查找)外表小、內表大且連接欄有高選擇性索引、需快速返回首批行內表無索引/選擇性差 → 災難;外表大 → 災難
Sort-Merge Join (SMJ)雙邊排序後歸併雙表大小相近、無可用索引、等值連接、並行查詢需臨時表空間排序、僅支援等值連接、SORT_AREA 小時溢磁碟
Hash Join (HJ)小表建 Hash Table 內存,大表 Probe大表關聯小表、等值連接、記憶體充足、並行查詢記憶體不足溢寫臨時表空間 (One/Multi-Pass)、非等值不支援

CBO 自動選擇邏輯:統計資訊準確時傾向 Hash Join (大數據量);NL 適用首行響應優先;SMJ 為無索引大表等值連接備選。

五、EXPLAIN PLAN 實戰解讀關鍵欄位

  • OPERATION / OPTIONS:如 TABLE ACCESS FULL, INDEX RANGE SCAN, HASH JOIN。
  • OBJECT_NAME / OBJECT_TYPE:涉及物件。
  • COST / CARDINALITY / BYTES:成本估算與基數。
  • ID / PARENT_ID:樹狀結構,CONNECT BY PRIOR ID = PARENT_ID 可重建完整計劃樹。

六、AUTOTRACE 快速診斷

SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS
SELECT * FROM emp WHERE deptno = 10;

輸出執行計劃 + 實際統計 (consistent gets, physical reads, sorts, rows processed)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved