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

Oracle 9i CPU 與 I/O 成本模型深度解析:CBO 外部環境感知機制

     編輯:Oracle 資料庫基礎

背景動機

Oracle 9i 引入基於成本的優化器(CBO)外部環境感知能力,不再假設資料庫運行於隔離環境,而是將 CPU 週期成本與磁盤 I/O 成本納入執行計劃評估,實現更貼近真實硬體特性的最優路徑選擇。

成本計算公式

成本 = ( #SRds × sreadtim + #MRds × mreadtim + #CPUCycles / cpuspeed ) / sreadtim

參數定義:

  • #SRds:單塊讀次數(索引訪問、表塊訪問);
  • #MRds:多塊讀次數(全表掃描、快速全表掃描);
  • #CPUCycles:預估 CPU 週期數;
  • sreadtim:單塊讀平均時間(毫秒);
  • mreadtim:多塊讀平均時間(毫秒);
  • cpuspeed:CPU 每秒週期數(MHz)。

統計信息由 DBMS_STATS.GATHER_SYSTEM_STATS 採集(NOWORKLOAD 或 INTERVAL 模式),存儲於 SYS.AUX_STATS$。

三大成本維度解析

1. CPU 成本

CBO 預估各操作所需機器指令週期。CPU 成本通常佔比較小,除非系統 CPU 高度飽和(如大量複雜運算、加密解密、XML 解析)。

2. I/O 成本

正比於物理塊讀取數。關鍵盲區:CBO 無法區分邏輯讀與物理讀,不知數據塊是否已在緩存中,可能高估緩存未命中場景的 I/O 成本。

3. 外部環境因子

  • 雜湊連接記憶體成本:預估 PGA 分配;
  • 排序成本:追蹤排序操作記憶體與臨時段使用;
  • 列表掃描成本:多塊讀時間校準;
  • 索引塊訪問成本:單塊讀時間校準。

優化器模式差異化影響

模式適用場景外部成本敏感度
FIRST_ROWS(n)OLTP、快速響應低,優先最小化首行返回時間
ALL_ROWS數據倉庫、批量處理高,全面權衡 CPU/I/O 總成本

局限性與演進

  • 不感知緩存命中率,可能誤判高緩存命中場景的 I/O 成本;
  • 10g 引入 OPTIMIZER_INDEX_COST_ADJ、OPTIMIZER_INDEX_CACHING 微調參數;
  • 11g+ 自適應優化器結合運行時統計動態修正,進一步緩解靜態成本模型偏差。

DBA 實戰建議

  1. 定期採集系統統計 DBMS_STATS.GATHER_SYSTEM_STATS('INTERVAL', 60) 反映真實硬體性能;
  2. 對比 NOWORKLOAD 與 WORKLOAD 模式統計差異,選擇更貼近生產負載的模式;
  3. 結合 AWR 中 IOSTAT、CPU 指標驗證成本模型準確性;
  4. 關鍵 SQL 使用 OPT_PARAM Hint 微調單條語句成本參數,避免全局副作用。

深入理解 CPU/I/O 成本模型,是從「SQL 調優工匠」進階為「系統級性能架構師」的必修內功。

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