硬體趨勢與 Oracle 回應
SMP 伺服器普及,8/16/32 CPU、數 GB SGA 成常態。Oracle 8i 起全面實現平行化:SQL 存取、DML、恢復。OPQ 是發揮多 CPU 效能的核心利器。
OPQ 運作機制
- 大型全表掃描時,Oracle 將表劃分為邏輯區塊
- 啟動多個並行子查詢,各讀取一區塊
- 並行查詢協調器 (PQ Coordinator) 收集結果、必要時排序、回傳用戶
- 原本數分鐘查詢,秒級完成
關鍵前提:N-1 並行程序
N = CPU 核心數。Oracle 9i 安裝時自動偵測 cpu_count 並衍生核心參數:
| 參數 | 預設衍生邏輯 | 影響面 |
| fast_start_parallel_rollback | 2 × cpu_count | 崩潰恢復並行回滾速度 |
| parallel_max_servers | cpu_count | 最大並行伺服器數 |
| log_buffer | cpu_count × 512KB (上限 128KB? 文件有誤,建議依實測調整) | Redo Log Buffer 大小、LGWR 進程數 |
| db_block_lru_latches | cpu_count / 2 | LRU 鎖數量、緩衝區並發 |
參數深度解析
fast_start_parallel_rollback
- 控制啟動時並行回滾未完成交易的積極度
- 預設 2×CPU,部分 DBA 建議 4×CPU
- 大幅縮短崩潰後資料庫開啟時間
parallel_max_servers
- 單實例設為 CPU 數;多實例共存需下調,避免過度換頁
- 需配合目標表分區數,允許 Oracle 選擇最佳並行度
log_buffer
- 定義 Redo 寫入緩衝區大小
- 常見誤區:設太大(>1MB)導致同步寫入、非 block size 倍數
- 9i 建議 2048 位元組倍數
db_block_lru_latches
- 9i 變為隱含參數,預設 CPU/2
- 多緩衝池下無法精細控制各池鎖分配
- 建議不超過 2-3×CPU 或 db_block_buffers/50
大型 SMP 部署建議
- 32/64 CPU 環境下參數調校效益顯著
- 監控
V$PX_SESSION, V$PQ_TQSTAT 觀察並行執行傾斜
- 配合分區表、ASM、巨大頁面 (HugePages) 綜合優化