首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 DPF 環境分區鍵選型全攻略:從資料傾斜評估到線上無縫變更

     編輯:DB2 教學

哈希分區核心機制

  • CREATE TABLE ... DISTRIBUTE BY HASH (col1, col2) 定義分區鍵 (PK)
  • 內部哈希函數:確定性、同值必落同分區 (假設分區組不變)
  • 分區鍵規則:
    • PK/Unique Index 必須為分區鍵超集 (分區鍵列必須出現在 PK/UI 中)
    • 1-3 列,越少越好
    • 整數 > 字串 > 十進位 (效率遞減)
  • 未顯式指定 PK 時預設:PK 首列 → 無 PK 時首個非長欄位

為什麼分區鍵決定生死?

維度影響機制風險
資料平衡哈希函數將值均勻映射到分區傾斜 → 儲存不均、查詢效能受最慢分區拖累 (木桶效應)
並置連接同分區組、同分區鍵、等值連接謂語非並置 → TQUEUE 跨網路重分發、效能指數級下降

最佳實踐:分區傾斜 ≤ 10%;**衝突時優先資料平衡**,並置透過 MQT 複製/維度表廣播解決。

驗證現有分區鍵:兩大儀表板

  1. 並置檢查:db2exfmt 查看計劃是否出現 TQUEUE 算子 (圖 1)
  2. 傾斜量測:自研存儲過程 ESTIMATE_EXISTING_DATA_SKEW (下載區可取得)
    db2 "call estimate_existing_data_skew('TPCD', 'SUPPLIER', 25)"
    # 25% 抽樣,輸出各分區行數、傾斜百分比、執行時間
    範例輸出:分區 3/8 傾斜 +60%,分區 1/5/6 傾斜 -36% → **嚴重不平衡**

評估候選新分區鍵:雙管齊下

  1. 工作負載視角:db2advis -d <db> -i <workload.sql> -m P 或 -g (套件快取) 推薦分區鍵
  2. 資料分佈視角:ESTIMATE_NEW_DATA_SKEW 以新 PK 建立副本表載入抽樣資料測量傾斜
    db2 "call estimate_new_data_skew('TPCD', 'SUPPLIER', 'S_ID', 100)"
    # 100% 全量,新 PK S_ID 傾斜 < 0.1% → 極佳平衡

線上無縫變更分區鍵:ADMIN_MOVE_TABLE (DB2 9.7+)

CALL SYSPROC.ADMIN_MOVE_TABLE
('TPCD', 'PART', '', '', '',           -- 目標表空間/索引表空間/LOB 表空間保持原樣
 '', 'COL2, COL3', '', '',             -- 新分區鍵 COL2, COL3
 'COPY_USE_LOAD, FORCE', 'MOVE');      -- 使用 LOAD 加速、強制執行

關鍵特性:

  • **全程線上讀寫可用**,對應用透明
  • 內部流程:建立目標表 → LOAD 複製資料 → 捕獲增量 (CDC) → 重放 → 交換名稱 → 清理
  • 支援同步:更改分區鍵、移動表空間、修改欄位定義、壓縮、索引重建

實戰決策流程圖

  1. 新表:依資料模型核心實體關係鍵 (高基數、穩定、常用連接鍵) 定義 PK
  2. 既有表:跑 ESTIMATE_EXISTING_DATA_SKEW → 傾斜 > 10% 進入優化流程
  3. 收集代表性工作負載 → db2advis -m P 取得候選 PK 清單
  4. 對每個候選 PK 跑 ESTIMATE_NEW_DATA_SKEW (1% 抽樣先篩選、最終 100% 確認)
  5. 綜合「傾斜度、並置收益、應用改動成本」選定新 PK
  6. 維護窗口執行 ADMIN_MOVE_TABLE 線上遷移,驗證應用無感知
  7. 事後持續監控傾斜與計劃並置狀態

部署前提與資源需求

  • DB2 9.7+ (核心產品含 ADMIN_MOVE_TABLE)
  • ESTIMATE_*_DATA_SKEW 存儲過程部署:db2 -td@ -vf estimate_data_skew.sql
  • ESTIMATE_NEW_DATA_SKEW 需原表表空間額外 ≥ 1% 空間建立副本
  • 生產環境建議維護窗口/低負載時段執行評估過程

總結

分區鍵是 DPF 架構的**基因密碼**。選錯導致資料傾斜與非並置連接雙重打擊;選對實現線性擴展與本地連接雙重紅利。掌握 **「評估現狀 → 候選建模 → 抽樣驗證 → 線上遷移」** 四步法,配合 ESTIMATE_EXISTING/NEW_DATA_SKEW 量化儀表板與 ADMIN_MOVE_TABLE 零停機變更利器,讓分區鍵優化從「玄學經驗」變為「數據驅動的可重複工程實踐」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved