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$。
CBO 預估各操作所需機器指令週期。CPU 成本通常佔比較小,除非系統 CPU 高度飽和(如大量複雜運算、加密解密、XML 解析)。
正比於物理塊讀取數。關鍵盲區:CBO 無法區分邏輯讀與物理讀,不知數據塊是否已在緩存中,可能高估緩存未命中場景的 I/O 成本。
| 模式 | 適用場景 | 外部成本敏感度 |
|---|---|---|
| FIRST_ROWS(n) | OLTP、快速響應 | 低,優先最小化首行返回時間 |
| ALL_ROWS | 數據倉庫、批量處理 | 高,全面權衡 CPU/I/O 總成本 |
OPTIMIZER_INDEX_COST_ADJ、OPTIMIZER_INDEX_CACHING 微調參數;DBMS_STATS.GATHER_SYSTEM_STATS('INTERVAL', 60) 反映真實硬體性能;NOWORKLOAD 與 WORKLOAD 模式統計差異,選擇更貼近生產負載的模式;IOSTAT、CPU 指標驗證成本模型準確性;OPT_PARAM Hint 微調單條語句成本參數,避免全局副作用。深入理解 CPU/I/O 成本模型,是從「SQL 調優工匠」進階為「系統級性能架構師」的必修內功。