多維叢集 (MDC, Multi-Dimensional Clustering) 是 DB2 V8 引入的革命性儲存技術,允許在多個維度上同時將相似數據物理聚簇在同一擴展區 (Extent/Block) 中,為星型查詢、範圍掃描、維度切片提供數量級 I/O 減少。本文系統梳理 MDC 核心機制、塊映射管理、空間回收演進 (離線→聯機)、DMS 表空間限制與運維最佳實踐。
ORGANIZE BY DIMENSIONS (dim1, dim2, ...),每個維度可為單欄或運算式。IN USE:包含有效資料FREE:空閒,可供新資料寫入RECLAIMED:已釋放待回收 (V9.7+)CREATE TABLE sales_mdc (
region_id SMALLINT NOT NULL,
product_id INTEGER NOT NULL,
sale_date DATE NOT NULL,
amount DEC(12,2)
)
ORGANIZE BY DIMENSIONS (region_id, product_id, (YEAR(sale_date)))
IN USERSPACE1
INDEX IN IDXSPACE1
LONG IN LOBSTSPACE1;
上述表將同一 region_id + product_id + 年份 的資料物理聚簇在同一 Block,查詢「華東區 + 手機 + 2023 年」僅需掃描對應 Block,而非全表掃描。
| 版本 | 回收方式 | 可用性影響 | 適用場景 |
|---|---|---|---|
| V8 - V9.5 | REORG TABLE tabname ALLOW NO ACCESS |
全表獨佔鎖,應用完全阻塞 | 維護窗口充足的傳統批次系統 |
| V9.7+ | REORG TABLE tabname RECLAIM EXTENTS ONLY ALLOW WRITE ACCESS |
預設允許寫入 (ALLOW WRITE ACCESS),可選 ALLOW READ ACCESS / ALLOW NO ACCESS | 7x24 系統、需即時回收大量刪除/轉出後的 Extent |
# 僅回收 Extent,不重組資料順序,速度極快
REORG TABLE sales_mdc RECLAIM EXTENTS ONLY ALLOW WRITE ACCESS;
# 參數控制併發
ALLOW WRITE ACCESS # 預設,讀寫均不阻塞
ALLOW READ ACCESS # 僅允許讀取,寫入等待
ALLOW NO ACCESS # 完全離線,速度最快但業務中斷
原理:掃描 Block Map,將標記為非 IN USE 的 Block 釋放回表空間自由空間鏈表,供同表空間其他物件使用。
亦可呼叫 db2Reorg API 程式化執行 RECLAIM EXTENTS,納入自動化維護作業。
PARTITION BY RANGE ... ORGANIZE BY DIMENSIONS 疊加 (MDC+Range),稱為「多維叢集分區表」。SELECT tabname, blockid, status, pages_used
FROM sysibmadm.mdc_block_map
WHERE tabschema = 'SALES' AND tabname = 'SALES_MDC';
SELECT
SUM(CASE WHEN status = 'FREE' THEN 1 ELSE 0 END) AS free_blocks,
SUM(CASE WHEN status = 'RECLAIMED' THEN 1 ELSE 0 END) AS reclaimed_blocks,
COUNT(*) AS total_blocks
FROM sysibmadm.mdc_block_map
WHERE tabschema = 'SALES' AND tabname = 'SALES_MDC';
REORG ... RECLAIM EXTENTS ONLY ALLOW WRITE ACCESS,配合 ADMIN_CMD 納入任務中心。RUNSTATS ON TABLE ... AND INDEXES ALL 確保優化器正確估算 Block 級存取成本。FREE Block 比例,低於 10% 時觸發表空間擴容告警。總結:MDC 是 DB2 面向分析型負載 (OLAP/HTAP) 的殺手級特性。V9.7 引入的 RECLAIM EXTENTS ONLY 聯機回收機制,徹底解決了早期版本「刪除後空間不釋放、需離線重組」的痛點,使 MDC 真正適合 7x24 生產環境。正確的維度設計、Extent 大小規劃、自動化回收排程,是發揮 MDC 效能與空間效率的關鍵。