掌握資料庫空間使用情況是 DBA 核心職責。DB2 提供多層次查詢方式:從表空間級細粒度到資料庫級總覽,本文整理三大主流查詢腳本並解析關鍵輸出參數。
適用單分區或需逐節點檢視的環境,回傳每個表空間的總/已用/可用空間 (MB):
SELECT
SUBSTR(TABLESPACE_NAME,1,20) AS TBSPC_NAME,
BIGINT(TOTAL_PAGES * PAGE_SIZE)/1024/1024 AS "TOTAL(MB)",
USED_PAGES * PAGE_SIZE/1024/1024 AS "USED(MB)",
FREE_PAGES * PAGE_SIZE/1024/1024 AS "FREE(MB)"
FROM TABLE(SNAPSHOT_TBS_CFG('DB_NAME', -2)) AS SNAPSHOT_TBS_CFG;
-2 代表所有資料庫分區節點。UPDATE MONITOR SWITCHES USING BUFFERPOOL ON)。DB2 9.7+ 推薦使用管理視圖,自動跨分區彙總,語法更簡潔:
SELECT
SUBSTR(TBSP_NAME,1,20) AS TABLESPACE_NAME,
SUBSTR(TBSP_CONTENT_TYPE,1,10) AS TABLESPACE_TYPE,
SUM(TBSP_TOTAL_SIZE_KB)/1024 AS TOTAL_MB,
SUM(TBSP_USED_SIZE_KB)/1024 AS USED_MB,
SUM(TBSP_FREE_SIZE_KB)/1024 AS FREE_MB,
TBSP_PAGE_SIZE AS PAGE_SIZE
FROM SYSIBMADM.TBSP_UTILIZATION
GROUP BY TBSP_NAME, TBSP_CONTENT_TYPE, TBSP_PAGE_SIZE
ORDER BY 1;
優點:無需開啟監控開關、自動處理 DPF 環境彙總、效能優於快照。
DB2 9.5+ 內建預存程序,一呼即得資料庫大小、容量上限與時間戳:
CALL GET_DBSIZE_INFO(?, ?, ?, 0);
輸出參數說明 (單位:Bytes):
| 參數名 | 含義 | 換算範例 |
|---|---|---|
| SNAPSHOTTIMESTAMP | 統計時間點 | 2008-05-26-10.53.06.421000 |
| DATABASESIZE | 目前實際佔用磁碟大小 | 1,203,863,552 B ≈ 1,148 MB |
| DATABASECAPACITY | 資料庫最大可擴展容量 (受授權/檔案系統限制) | 4,281,493,504 B ≈ 4,083 MB |
快速換算:MB = Bytes / 1024 / 1024。
在多節點 (DPF) 環境下,GET_DBSIZE_INFO 僅回傳協調節點的資料庫大小,無法反映全叢集總容量。此時必須搭配 SYSIBMADM.TBSP_UTILIZATION 跨分區彙總才準確。
#!/bin/bash
# daily_space_check.sh
db2 "CALL GET_DBSIZE_INFO(?, ?, ?, 0)" | grep -E 'DATABASESIZE|DATABASECAPACITY'
db2 -x "SELECT TBSP_NAME,
DEC(SUM(TBSP_USED_SIZE_KB)/1024/1024,10,2) AS USED_GB,
DEC(SUM(TBSP_TOTAL_SIZE_KB)/1024/1024,10,2) AS TOTAL_GB
FROM SYSIBMADM.TBSP_UTILIZATION GROUP BY TBSP_NAME ORDER BY USED_GB DESC"
# 設定閾值告警 (如 USED_GB/TOTAL_GB > 85%)

SNAPSHOT_TBS_CFG (舊版相容) 或 SYSIBMADM.TBSP_UTILIZATION (推薦)。CALL GET_DBSIZE_INFO。靈活組合這三種查詢,即可全方位掌控 DB2 空間健康狀態。