核心原則
以最少磁碟 I/O 取得所需資料。評估指標:回應時間、吞吐量、可用性、命中率、記憶體使用效率。
調優順序:設計階段 → 運行階段
一、系統設計開發階段
1.1 應用架構選型
C/S 兩層 vs B/S 三層,對資料庫連線數、併發模型影響大,依訪問量與伺服器資源決策。
1.2 善用分區、索引、存檔
- 資料增長快的表 → Range/Hash 分區
- 高頻查詢表 → 建立適當索引
- 靜態歷史資料 → 移入存檔表/表空間,縮小線上查詢範圍
1.3 SQL 語句優化
- 優化器重用解析樹 → 統一寫法、綁定變數
- 善用索引減少資料塊存取
- 推薦 Oracle Optimizer 與 Row-Level Manager 輔助調優
1.4 磁碟 I/O 佈局
- 同表空間資料檔分散不同磁碟
- 表/索引分離、用戶/系統表空間分離、回滾段專屬表空間、臨時表空間獨立
1.5 區塊大小與儲存參數
DB_BLOCK_SIZE 建庫後不可變,依樣本資料決定(通常 8K/16K)
- 儲存參數(INITIAL、NEXT、PCTINCREASE)依業務增長趨勢預設
二、資料庫運行階段
2.1 作業系統層級
2.1.1 減少 Swapping
- Solaris 用
vmstat 5、sar -p 10 10 監控
- 對策:停用非必要 daemon、適度縮減 DB Buffer Cache、縮減 Unix File Buffer(裸裝置環境)
2.1.2 控制 Paging
- 少量可接受,過多則效能驟降
- 對策:增購記憶體、遷移工作負載、調整核心參數、確保 SGA 駐留單一共享記憶體段
2.1.3 SGA 駐留記憶體
重新配置 Unix 核心參數(shmmax 等)確保 SGA 不被換出。
2.2 資料庫實例層級
2.2.1 SGA 子結構命中率監控
| 元件 | 關鍵指標 | 健康門檻 |
| Library Cache | GETHITRATIO / RELOADS/PINS | >90% / <1% |
| Dictionary Cache | GETMISSES/GETS | <15% |
| DB Block Buffer | 1 - (PHYSICAL_READS / (DB_BLOCK_GETS+CONSISTENT_GETS)) | >85% |
- 大型匿名區塊導致無法重用 → 改寫為 Stored Procedure
- 高頻物件用
DBMS_SHARED_POOL.KEEP 釘住記憶體
2.2.2 I/O 與資源爭用
- 動態擴展空間影響效能 → 預先分配、啟用本地管理表空間(LMT)
- 運行期監控低效 SQL(缺索引/計劃劣化) → 建索引或改寫 SQL
- 鎖/閂爭用 → 調整
DB_BLOCK_LRU_LATCHES、DML_LOCKS 等參數
三、常用工具與腳本
UTLSTAT.SQL/UTLESTAT.SQL 產生時段效能報表
- 動態效能視圖(V$)與資料字典視圖
- Oracle Enterprise Manager 圖形化監控
結語
調優是持續迭代的系統工程,不可憑單一時間點斷言好壞。DBA 需在大量實戰中累積經驗,結合業務特性精準施策。