DB2 Database Partitioning Feature (DPF) 透過「分區鍵 + Hash 算法 + 分區映射」將數據水平切分至多個邏輯/物理節點,理想狀態下實現線性擴展。然而,分區鍵選型不當、業務數據天然傾斜、節點擴縮容三大因素,極易導致數據分佈不均(Data Skew),拖垮查詢效能與系統吞吐。本文建立識別傾斜、判斷干預時機、選擇重分佈策略的完整決策框架。
測試環境:2 物理機、4 邏輯節點(DP 0~3)。向空表導入 10,240 行,分區鍵為 1~20 循環整數。查詢分佈:
SELECT DBPARTITIONNUM(key), COUNT(*) FROM load_dpf GROUP BY DBPARTITIONNUM(key) ORDER BY 1;
結果顯示:DP 0/2 各 ~3,000 行,DP 1/3 各 ~2,000 行——明顯傾斜。原因:僅 20 個鍵值,Hash 後僅落入少數 HP,映射至固定 DP,無法利用 4096 HP 的分散能力。
| 場景 | 癥狀 | 後果 | 處置 |
|---|---|---|---|
| A. 傾斜導致 I/O 熱點 | 部分節點磁碟利用率長期 > 80%,其他 < 30%;查詢計劃顯示數據分佈不均 | 熱點節點成瓶頸,整體吞吐受限於最慢節點(木桶效應) | `REDISTRIBUTE ... USING DISTFILE` 修正權重 |
| B. 節點退役/下線 | 硬體退役、縮容計畫 | 目標節點數據必須先遷出,否則無法下線 | `REDISTRIBUTE ... USING TARGETMAP` 將目標節點映射至其他節點 |
| C. 新節點上線/擴容 | 新增 DP 加入分區組 | 新節點空跑,舊節點壓力不降,擴容失效 | `REDISTRIBUTE ... UNIFORM` 重平衡(類 Rebalance) |
REDISTRIBUTE DATABASE PARTITION GROUP
{ UNIFORM | USING DISTFILE | USING TARGETMAP | USING TARGETMAP DISTFILE }
[ EXCLUDE ] [ STATISTICS USE PROFILE ] [ NOT ROLLFORWARD RECOVERABLE ]
參數詳解請參考 IBM Knowledge Center:r0002069.htm。
`UNIFORM` 將 4096 HP 盡量均勻分配給現有 DP,**前提是分區鍵值本身分佈均勻**。若鍵值傾斜(如上例 1~20 循環),`UNIFORM` 無法改善——因為 HP 本身就集中在少數值上。此時必須用 `DISTFILE` 干預 HP 權重,或根治換鍵。

結語:數據傾斜是 DPF 架構的「先天性疾病」,而非「偶發故障」。DBA 應在建模階段嚴選高基數、低相關性分區鍵;若已上線,建立「分佈健康度定期巡檢(月/季)」機制,將 `REDISTRIBUTE` 納入標準化變更流程,而非等到嚴重熱點才被動救火。