CREATE TABLE ... DISTRIBUTE BY HASH (col1, col2) 定義分區鍵 (PK)| 維度 | 影響機制 | 風險 |
|---|---|---|
| 資料平衡 | 哈希函數將值均勻映射到分區 | 傾斜 → 儲存不均、查詢效能受最慢分區拖累 (木桶效應) |
| 並置連接 | 同分區組、同分區鍵、等值連接謂語 | 非並置 → TQUEUE 跨網路重分發、效能指數級下降 |
最佳實踐:分區傾斜 ≤ 10%;**衝突時優先資料平衡**,並置透過 MQT 複製/維度表廣播解決。
db2exfmt 查看計劃是否出現 TQUEUE 算子 (圖 1)ESTIMATE_EXISTING_DATA_SKEW (下載區可取得)
db2 "call estimate_existing_data_skew('TPCD', 'SUPPLIER', 25)"
# 25% 抽樣,輸出各分區行數、傾斜百分比、執行時間
範例輸出:分區 3/8 傾斜 +60%,分區 1/5/6 傾斜 -36% → **嚴重不平衡**db2advis -d <db> -i <workload.sql> -m P 或 -g (套件快取) 推薦分區鍵ESTIMATE_NEW_DATA_SKEW 以新 PK 建立副本表載入抽樣資料測量傾斜
db2 "call estimate_new_data_skew('TPCD', 'SUPPLIER', 'S_ID', 100)"
# 100% 全量,新 PK S_ID 傾斜 < 0.1% → 極佳平衡
CALL SYSPROC.ADMIN_MOVE_TABLE
('TPCD', 'PART', '', '', '', -- 目標表空間/索引表空間/LOB 表空間保持原樣
'', 'COL2, COL3', '', '', -- 新分區鍵 COL2, COL3
'COPY_USE_LOAD, FORCE', 'MOVE'); -- 使用 LOAD 加速、強制執行
關鍵特性:
ESTIMATE_EXISTING_DATA_SKEW → 傾斜 > 10% 進入優化流程db2advis -m P 取得候選 PK 清單ESTIMATE_NEW_DATA_SKEW (1% 抽樣先篩選、最終 100% 確認)ADMIN_MOVE_TABLE 線上遷移,驗證應用無感知ADMIN_MOVE_TABLE)ESTIMATE_*_DATA_SKEW 存儲過程部署:db2 -td@ -vf estimate_data_skew.sqlESTIMATE_NEW_DATA_SKEW 需原表表空間額外 ≥ 1% 空間建立副本分區鍵是 DPF 架構的**基因密碼**。選錯導致資料傾斜與非並置連接雙重打擊;選對實現線性擴展與本地連接雙重紅利。掌握 **「評估現狀 → 候選建模 → 抽樣驗證 → 線上遷移」** 四步法,配合 ESTIMATE_EXISTING/NEW_DATA_SKEW 量化儀表板與 ADMIN_MOVE_TABLE 零停機變更利器,讓分區鍵優化從「玄學經驗」變為「數據驅動的可重複工程實踐」。