表空間是 DB2 數據庫邏輯存儲與物理存儲的橋樑。本文系統講解 DB2 存儲物理層次 (Data Page → Extent → Table Space)、三種管理模式 (SMS/DMS/自動存儲) 特性對比、數據庫創建時表空間定義語法、維護命令、RAID 環境下優化參數設置。
EXTENTSIZE 指定 (默認 32 頁)。一張表獨享若干 Extent。關鍵特性:邏輯順序 ≠ 物理順序 (鏈式);邏輯順序 = 物理順序 (順序/表空間)。OS 塊大小:Windows 0.5K、Linux 1K。
| 特性 | SMS (系統管理) | DMS (數據庫管理) | DMS 自動存儲 (Automatic Storage) |
|---|---|---|---|
| 管理者 | OS 文件系統 | DB2 引擎 | DB2 引擎 (自動化) |
| 容器類型 | 目錄 (路徑) | 文件/裸設備 | 文件 (自動管理路徑) |
| 空間分配 | 按需增長 (文件創建) | 預分配 (CREATE 時指定大小) | 預分配 + 自動擴展 (默認 AUTORESIZE YES) |
| 條帶 | 支持 (多目錄) | 支持 (多容器) | 支持 |
| 裸設備支持 | 否 | 是 (高性能) | 否 |
| 最大表空間 (4K 頁) | 64 GB | 8 TB | 8 TB |
| 最大表空間 (32K 頁) | 512 GB | 64 TB | 64 TB |
| ALTER 容器 | 不支持 | ADD/DROP/REDUCE/RESIZE | 自動管理,可手動 ALTER |
| 默認類型 (v8/v9+) | v8 默認 | - | v9+ 默認 |
| 性能 | 一般 (文件系統開銷) | 最佳 (裸設備、預分配、無 FS 鎖) | 優 (自動化減少人工誤操作) |
db2 get dbm cfg | find /i "DFTDBPATH"
db2 "create database mydb on /data/db2"
db2 "create database mydb automatic storage yes on /data/db2"
CREATE DATABASE mydb
AUTOMATIC STORAGE NO
CATALOG TABLESPACE MANAGED BY DATABASE
USING (FILE '/data/ts/catalog.ts' 100M)
EXTENTSIZE 8
PREFETCHSIZE 16
USER TABLESPACE MANAGED BY DATABASE
USING (FILE '/data/ts/user.ts' 1G)
EXTENTSIZE 32
PREFETCHSIZE 64
TEMPORARY TABLESPACE MANAGED BY SYSTEM
USING ('/data/ts/temp1', '/data/ts/temp2')
WITH "Created by DBA";
參數解析:
EXTENTSIZE:每個 Extent 頁數,覆蓋數據庫級 DFT_EXTENT_SZ。PREFETCHSIZE:預讀頁數,建議 = EXTENTSIZE × 容器數 (條帶數),觸發並行 I/O。AUTORESIZE YES/NO:自動存儲表空間默認 YES,手工 DMS 默認 NO。| 任務 | 命令 |
|---|---|
| 列出所有表空間詳情 | db2 list tablespaces show detail |
| 查看表空間 ID=3 的容器 | db2 "list tablespace containers for 3 show detail" |
| 查看高水位標記 (HWM) | 從 list tablespaces show detail 輸出中 High water mark 獲取 |
| 降低 HWM (釋放空間) | db2 "alter tablespace TBSP_NAME reduce max" (自動存儲/DMS) |
| 添加容器 | db2 "alter tablespace TBSP_NAME add (FILE '/path/container' 500M)" |
| 監控 I/O 並行度 | db2pd -tablespaces -db mydb |
-- 假設 RAID Stripe Size = 64KB, DB2 Page Size = 16KB
-- 最佳 EXTENTSIZE = (Stripe Size / Page Size) × 容器數 = (64/16) × N = 4 × N
-- 推薦設置:
EXTENTSIZE 16 (4 stripes × 4 containers)
PREFETCHSIZE 64 (EXTENTSIZE × 容器數)
-- 並啟用並行 I/O
db2set DB2_PARALLEL_IO=*
-- 或針對表空間
db2 "alter tablespace TBSP_NAME parallel_io on"
SQLSPCS.1/2:表空間元數據 (容器、HWM、狀態)。SQLSGF.1/2:自動存儲路徑信息。SQLDBCONF:數據庫配置 (不可直接編輯,用 UPDATE DB CFG)。DB2RHIST.ASC:歷史記錄 (備份、恢復、DDL)。SQLOGCTL.LFH:日志控制文件 (崩潰恢復關鍵)。DB2 表空間管理核心在於:**選對管理模式 (生產首選自動存儲 DMS)、算對 Extent/Prefetch/容器數匹配 RAID 條帶、用對維護命令 (HWM 監控、自動擴展、並行 I/O)**。自動存儲模式以「自動化、條帶化、可擴展」三大特性成為現代 DB2 部署標配,DBA 應重點掌握其參數調優與故障排查,而非糾結於手工 SMS/DMS 細節。