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

DB2 精準發掘未使用索引、表與套件的三大法寶

     編輯:DB2 教學

清理未使用物件能釋放空間、減少維護開銷、提升優化器效率。DB2 9.7+ 引入 LASTUSED 欄位,配合 db2pd 工具,提供三種精準識別未用物件的方法。

方法一:查詢目錄視圖 LASTUSED 欄位 (DB2 9.7+)

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 -tcbstats index (全版本通用,即時精準)

$ 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,即為未用索引。

方法三:綜合策略 — 歷史與即時雙重保險

  1. 長期觀察 (月/季): 依賴 LASTUSED 持久記錄,識別長期閒置物件;
  2. 即時驗證: 刪除前執行 db2pd -tcbstats index 確認 Scans=0,避免誤刪剛被維護操作刷新 LASTUSED 的活躍索引;
  3. 同步清理: 同步檢查 SYSCAT.TABLES、SYSCAT.PACKAGES 的 LASTUSED,一併清理未用表與套件。

注意事項

  • db2pd 輸出資訊隨資料庫重啟重置,僅反映本啟動週期;
  • LASTUSED 持久儲存,跨重啟保留,適合長期審計;
  • z/OS 早已有此功能,LUW 9.7+ 追平;
  • 刪除前務必確認備份、評估相依性 (外鍵、視圖、觸發器、應用程式硬編碼)。

一鍵審計腳本思路

將上述查詢封裝為 Shell/Python 腳本,定期產出「未用物件報表」,納入例行 DBA 巡檢流程,讓資料庫保持精簡高效。

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