多維聚集(MDC)表將多維相似值行物理聚集在同一塊(Block,等於表空間擴展大小),提升分析查詢 I/O 效率。塊映射跟蹤所有擴展使用狀態,刪除/轉出數據後塊標記為可復用,但不歸還表空間。DB2 9.7 引入 REORG TABLE RECLAIM EXTENTS ONLY 選項,支持聯機釋放 MDC 專用擴展供其他對象使用,可控制並發訪問權限(默認 ALLOW WRITE ACCESS)。僅支持 DMS 表空間。
V9 引入自動維護(備份、統計、重組)。V9.7 擴展支持 MDC 擴展回收。需啟用三參數:AUTO_MAINT、AUTO_TBL_MAINT、AUTO_REORG = ON。維護策略由系統存儲過程 AUTOMAINT_SET_POLICY/FILE 以 XML 形式設置。
Linux x64 DB2 9.7,創建數據庫 MYDB 及 DMS 表空間 tbs1 (自動擴容)。創建 MDC 表:
CREATE TABLE mdctab (c1 INT, c2 INT) ORGANIZE BY DIMENSIONS (c1) IN tbs1;
插入 4 條不同 c1 值數據,佔用 4 個擴展。刪除所有數據後表空間空閒頁不變(擴展未釋放)。
db2 "reorg table mdctab RECLAIM EXTENTS ONLY allow write access"
-- 空閒頁從 2112 增至 2208,釋放 3 個擴展(1 個保留)
不帶 RECLAIM EXTENTS ONLY 的 REORG 需離線執行;帶該選項支持 ALLOW WRITE ACCESS。
調用 AUTOMAINT_SET_POLICY,類型 AUTO_REORG,XML 配置指定 reclaimExtentsSizeForMDCTables 閾值(KB):
CALL SYSPROC.AUTOMAINT_SET_POLICY
('AUTO_REORG', BLOB(
'
'));
示例設置 1KB 閾值便於演示,生產環境按實際調整。
調用 AUTOMAINT_SET_POLICY,類型 MAINTENANCE_WINDOW,定義在線/離線窗口(起始時間、持續、星期、月份):
CALL SYSPROC.AUTOMAINT_SET_POLICY
('MAINTENANCE_WINDOW', BLOB(
'
Mon Tue Wed Thu Fri
All
All
All
All
All
'));
使用 AUTOMAINT_GET_POLICYFILE 導出 XML 文件檢查(存放於 SQLLIB/tmp)。或用 AUTOMAINT_GET_POLICY(需嵌入式 C 調用)。
自動維護每 7200 秒(2 小時)檢查策略:
SELECT REFRESH_INTERVAL FROM TABLE(HEALTH_GET_IND_DEFINITION('')) AS T
WHERE NAME = 'db.tb_reorg_req'; -- 返回 7200
db2 update db cfg using AUTO_REORG on
-- 驗證:AUTO_MAINT=ON, AUTO_TBL_MAINT=ON, AUTO_REORG=ON
等待下一刷新周期進入維護窗口,自動執行 REORG RECLAIM。通過 LIST HISTORY REORG ALL FOR MYDB 查看歷史:
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
G T 20100101064038 N S0000000.LOG S0000002.LOG
Table: "HAOQINGY"."MDCTAB"
Comment: REORG RECLAIM
Start Time: 20100101064038 End Time: 20100101064039 Status: A EID: 3
G T 20100101075636 N S0000000.LOG S0000000.LOG
Table: "HAOQINGY"."MDCTAB"
Comment: REORG RECLAIM
Start Time: 20100101075636 End Time: 20100101075636 Status: A EID: 5
第一條為手動執行,第二條(EID:5)為自動維護觸發,時間戳確認自動執行。再次手動執行不再釋放空間。
DB2 9.7 RECLAIM EXTENTS ONLY 實現 MDC 聯機空間回收,結合自動維護策略(閾值、窗口、啟用參數)達成全自動化,釋放 DBA 重複勞動,提升管理效率。生產環境建議根據業務特點設置合理閾值與維護窗口。