清理未使用物件能釋放空間、減少維護開銷、提升優化器效率。DB2 9.7+ 引入 LASTUSED 欄位,配合 db2pd 工具,提供三種精準識別未用物件的方法。
SYSCAT.INDEXES、SYSCAT.TABLES、SYSCAT.PACKAGES 新增 LASTUSED (DATE),記錄最後被存取時間。'01/01/0001' 表示從未使用。
-- 未使用索引
SELECT INDSCHEMA, INDNAME, TABNAME
FROM SYSCAT.INDEXES
WHERE LASTUSED = '01/01/0001';
-- 未使用表
SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABLES
WHERE LASTUSED = '01/01/0001';
-- 未使用套件
SELECT PKGSCHEMA, PKGNAME
FROM SYSCAT.PACKAGES
WHERE LASTUSED = '01/01/0001';
限制:LASTUSED 會在統計更新、重組等維護操作時被刷新,不完全等同業務存取;且僅 9.7+ 支援。
$ db2pd -d sample -tcbstats index
輸出 TCB Index Stats 區段,關鍵欄位 Scans:
Scans = 0 → 自資料庫啟動以來從未被掃描;IID (Index ID) 透過目錄視圖關聯索引名稱。輸出片段:
TCB Index Stats:
Address TableName IID EmpPgDel RootSplits BndrySplts PseuEmptPg Scans
0x7A0ABDA8 SYSTABLES 9 0 0 0 0 0
0x7A0ABDA8 SYSTABLES 8 0 0 0 0 0
IID=8,9 對應索引 Scans=0,即為未用索引。
LASTUSED 持久記錄,識別長期閒置物件;db2pd -tcbstats index 確認 Scans=0,避免誤刪剛被維護操作刷新 LASTUSED 的活躍索引;SYSCAT.TABLES、SYSCAT.PACKAGES 的 LASTUSED,一併清理未用表與套件。db2pd 輸出資訊隨資料庫重啟重置,僅反映本啟動週期;LASTUSED 持久儲存,跨重啟保留,適合長期審計;將上述查詢封裝為 Shell/Python 腳本,定期產出「未用物件報表」,納入例行 DBA 巡檢流程,讓資料庫保持精簡高效。