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

DB2 表空間深度實戰:SMS vs DMS、四大類型、容器操作與重命名全攻略

     編輯:DB2 教學

表空間定位

表空間是 資料庫 ↔ 表 間的邏輯層,支援將數據合理分佈於不同磁碟/路徑,提升 I/O 並行度與管理彈性。

兩大管理模式對比

特性SMS (系統管理)DMS (資料庫管理)
容器本質OS 目錄預分配文件 / 原始裝置
空間增長自動、按需手動 ALTER ADD/RESIZE/EXTEND
管理複雜度低中
索引/LOB 分離存放不支援支援 (INDEX IN / LONG IN)
表跨表空間分佈不支援支援
按需分配是否 (預分配)
多磁碟條帶化是 (多目錄)否 (單文件/裝置)
區段大小可變否否
典型效能基準優 ~20% (大量載入/查詢)

建議:生產核心表優先 DMS;開發/測試/小表可用 SMS。

四大表空間類型

類型用途預設名備註
規則表空間用戶表、索引、系統目錄USERSPACE1 / SYSCATSPACE核心業務數據
大對象表空間LOB/LONG/XML 數據—可獨立於基表空間
系統臨時表空間排序、重組、建索引、連接中間結果TEMPSPACE1至少一個,建議單頁面大小一個
用戶臨時表空間已宣告全域暫存表 (DGTT)—非預設建立,應用臨時數據隔離

容器操作實戰速查 (命令行)

SMS 建立/刪除


# 建立 (Win 多磁碟條帶)
CREATE TABLESPACE RESOURCE MANAGED BY SYSTEM USING ('D:\acc_tbsp','E:\acc_tbsp','F:\acc_tbsp')
# 產生三目錄,各含 SQLTAG.NAM

# 刪除
DROP TABLESPACE RESOURCE
# 目錄殘留需手工刪除

DMS 建立/擴容/縮容/刪除


# 建立 (兩文件容器,各 5000 頁 = 20MB @ 4KB)
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE
  USING (FILE 'D:\db2data\acc_tbsp' 5000, FILE 'E:\db2data\acc_tbsp' 5000)

# 新增容器
ALTER TABLESPACE RESOURCE ADD (FILE 'F:\db2data\acc_tbsp' 5000)

# 縮容 (設定絕對大小 8000 頁) — 數據未滿才能縮
ALTER TABLESPACE RESOURCE RESIZE (FILE 'D:\db2data\acc_tbsp' 8000, FILE 'E:\db2data\acc_tbsp' 8000, FILE 'F:\db2data\acc_tbsp' 8000)

# 擴容 (在現有基礎上 +1000 頁)
ALTER TABLESPACE RESOURCE EXTEND (FILE 'D:\db2data\acc_tbsp' 1000, FILE 'E:\db2data\acc_tbsp' 1000, FILE 'F:\db2data\acc_tbsp' 1000)

# 刪除 (連帶刪除物理文件)
DROP TABLESPACE RESOURCE

# Unix 原始裝置範例
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE
  USING (DEVICE '/dev/rdblv6' 10000, DEVICE '/dev/rdblv7' 10000, DEVICE '/dev/rdblv8' 10000)
# 需實例擁有者可寫入裝置

臨時表空間建立


# 系統臨時 (SMS)
CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp MANAGED BY SYSTEM USING ('D:\tmp_tbsp','E:\tmp_tbsp')

# 用戶臨時 (DMS)
CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE
  USING (FILE 'D:\db2data\user_tbsp' 5000, FILE 'E:\db2data\user_tbsp' 5000)

重命名與建表指定


# 重命名 (自動更新所有目錄引用)
RENAME TABLESPACE RESOURCE TO RES1

# 建表指定表空間
CREATE TABLE T1 (ABC INT) IN RES1
# 索引/LOB 可另指定:INDEX IN IDX_TS LONG IN LOB_TS

DMS 進階優化技巧

  • db2empfa 啟用 SMS 區段預分配 (建議 32 頁/區段)
  • 多容器分佈於不同物理磁碟/RAID 組,實現 I/O 條帶化
  • 索引/LOB 獨立表空間:CREATE TABLE ... INDEX IN IDX_TS LONG IN LOB_TS
  • 定期 db2dart /TS 檢查表空間一致性
  • 監控 db2 get snapshot for tablespaces 關注 Usable pages、High water mark

避坑清單

  • SMS 刪除表空間不刪物理目錄 → 手工清理
  • DMS 縮容前必須確認數據未超過目標大小,否則報錯
  • 區段大小 (EXTENTSIZE) 建表空間時固定,後續不可變
  • 系統臨時表空間至少保留一個,頁面大小覆蓋所有用戶表
  • Unix 原始裝置路徑必須為字符裝置 (/dev/rdsk/...),區塊裝置效能差

掌握表空間類型選擇、容器全生命週期管理、I/O 條帶化佈局,是 DB2 存儲層效能與可用性的基石。

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