Oracle 並行處理 利用多 CPU、多 I/O 通道、大量記憶體同時執行單一資料庫操作,是 TB 級資料倉庫與關鍵業務系統的核心引擎。本文深入解析 9i 並行架構優勢、靜態分區 (Shared-Nothing) 與動態並行 (Shared-Everything) 兩大設計策略的本質差異。
並行處理核心價值
- **硬體資源 100% 利用**:每個 CPU、每 Byte 記憶體、所有 I/O 頻寬。
- **自適應動態分配**:依可用資源、請求優先級、系統負載即時調整並行度。
- **無縫整合 RAC**:單機 SMP、叢集、MPP 皆受益於同一架構。
- **支援混合負載**:策略性查詢 (CEO 決策) 優先於批次報表,資源動態劃分。
兩大並行化設計策略
| 策略 | 核心機制 | 代表架構 | 關鍵限制 |
| 靜態並行 (Static Partitioning) | **物理資料分區** 綁定節點,節點獨佔存取其分區 | Shared-Nothing (純不共享) | 資料重新分區需人工、擴展不彈性、單點故障 |
| 動態並行 (Dynamic Parallelism) | **執行時** 依查詢特徵切分工作單元,多進程並行存取共享資料 | Shared-Everything (共享一切) | 需高速 Interconnect、鎖/一致性協調開銷 |
Shared-Nothing (不共享) 架構缺點
- 不適合 SMP 硬體:SMP 本質共享一切,強行分區屬人為限制。
- 資源利用率低:查詢不需全部分區時,閒置節點無法協助;大表未分區時無法並行。
- 擴展僵化:業務增長需重新分區 (Re-partition),耗時、停機、風險高。
- 容錯能力弱:節點掛掉 = 對應分區不可用,無法透過其他節點接管。
Oracle Shared-Everything (共享一切) 動態並行優勢
- 每個 SQL 獨立優化並行計畫:解析時依統計資訊、當前負載、優先級決定並行度 (DOP) 與工作分配。
- 彈性並行度:無最小 DOP 限制,可 1~所有節點動態調整。
- 自適應新增節點:新節點上線,下一條 SQL 自動納入並行選項,無需重組資料。
- 查詢協調器 (QC) + PX Servers:QC 分派工作,PX Server 從共用池取得,工作完成歸還池中。
- 資料/功能傳遞機制**:同樣支援區塊傳送、功能傳送,但**不受物理分區限制**,可構造最優資料子集。
並行執行流程
- SQL 進入 → 解析 → 優化器決定 **並行執行計畫** (含 DOP、資料分佈方法)。
- 原始 Process 變為 **Query Coordinator (QC)**。
- 從 **Parallel Execution Server Pool** 分配 N 個 PX Servers (跨節點)。
- 每個 PX Server 獨立處理指定資料片段 (Granule)。
- 中間結果透過 **PX SEND / PX RECEIVE** 在 PX Servers 間傳遞 (或寫暫存表)。
- QC 收集最終結果回傳客戶端。
Granule (粒度) 分配方式
- Block Range Granules:依區塊範圍切分,適合全表掃描。
- Partition Granules:依分區切分,適合分區表。
與 RAC 整合
RAC 環境下,PX Servers 可跨實例分配,**Cache Fusion** 透過 Interconnect 傳遞區塊,實現真正的 **叢集並行查詢**。
結論
Oracle 選擇 **動態並行 + 共享一切** 架構,而非靜態分區,核心在於**保留硬體彈性、支援混合負載、消除人工重組**。這是 Oracle 在並行處理領域持續領先的架構基因。