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

DB2 for i 索引建議壓縮技術:從海量建議到精準索引的自動化之路

     編輯:DB2 教學

背景:索引建議爆炸與 DBA 的困境

DB2 for i (i5/OS) V5R4 引入 Index Advisor,自動記錄查詢優化器建議的索引。但隨著業務增長,SYSIXADV 表積累海量建議,存在大量冗余:

  • 相同欄位不同順序的重複建議(如 C1,C2,C3 與 C1,C3,C2)
  • 可被單一複合索引覆蓋的多條單列建議
  • 統計欄位分散,難以評估索引真實價值

Index Advice Condenser(索引建議壓縮器)應運而生,將原始建議聚合為可直接落地的精準索引推薦。

核心機制:從原始建議到壓縮建議的轉換邏輯

原始建議判重鍵值(SYSIXADV 表)

優化器按以下屬性判定是否為「新建議」:

  • LEADING_COLUMN_KEYS / KEY_COLUMNS_ADVISED(領頭鍵/全部建議鍵)
  • TABLE_NAME / TABLE_SCHEMA / PARTITION_NAME
  • INDEX_TYPE / NLSS_TABLE_NAME / NLSS_TABLE_SCHEMA

命中即更新:TIMES_ADVISED +1、LAST_ADVISED = CURRENT TIMESTAMP。

壓縮規則:鍵順序無關性與覆蓋合併

關鍵欄位: LEADING_KEYS_ORDER_INDEPENDENT 標識領頭鍵可重排。

示例演進:

原始建議序號建議鍵領頭鍵可重排壓縮結果
1C1, C2, C3C1, C2, C3合併為單一索引
(C1, C3, C2, C4)
2C1, C3, C2C1
3C1, C3, C2, C4C1, C2, C3, C4

壓縮器自動識別:若建議 B 的鍵集合包含建議 A,且順序可調整滿足 A,則合併保留 B。

壓縮後視圖:CONDENSEDINDEXADVICE 關鍵欄位解讀

壓縮過程中,實例級欄位被聚合為統計級欄位:

欄位壓縮邏輯業務含義
TIMES_ADVISEDSUM總建議次數,反映索引需求強度
LAST_ADVISEDMAX最近一次建議時間,判斷時效性
ESTIMATED_CREATION_TIMEMAX最長建索引耗時,評估維護窗口可行性
MOST_EXPENSIVE_QUERYMAX最耗時查詢成本,量化收益上限
AVERAGE_QUERY_ESTIMATEAVG平均查詢成本,評估常規收益
LOGICAL_PAGE_SIZEMAX建議頁面大小,影響存儲效率
TABLE_SIZE最新值建議時表規模,關聯創建成本

被捨棄欄位:MTI_USED、MTI_CREATED、LAST_MTI_USED、REASON_ADVISED 等臨時索引相關統計。

三種訪問方式:圖形界面、SQL 視圖、UDTF 函數

1. iSeries Navigator 圖形化壓縮器

  • 右鍵 Schema/Table → "Condense Index Advice"
  • 需客戶端安裝 V5R4M0 iSeries Access for Windows SP
  • 直觀展示壓縮前後對比,支持導出報表

2. 唯讀視圖 QSYS2.CONDENSEDINDEXADVICE

-- 全 Schema 壓縮建議
SELECT * FROM QSYS2.CONDENSEDINDEXADVICE WHERE table_schema = 'CONDENSE';

-- 單表壓縮建議
SELECT * FROM QSYS2.CONDENSEDINDEXADVICE 
WHERE table_name = 'EMPLOYEE' AND table_schema = 'CONDENSE';

-- 高價值建議篩選(平均查詢成本 > 10 秒)
SELECT * FROM QSYS2.CONDENSEDINDEXADVICE 
WHERE table_schema LIKE 'Q%' AND average_query_estimate > 10;

3. 底層 UDTF:QSYS2.CONDENSE_ADVICE

SELECT * FROM TABLE(QSYS2.CONDENSE_ADVICE('CRPDTA','B123456')) AS a
WHERE a.table_size > (1024*1024) 
  AND MONTH(last_advised) = MONTH(CURRENT TIMESTAMP)
ORDER BY average_query_estimate DESC
FETCH FIRST 15 ROWS ONLY;

支持自定義篩選、排序、分頁,適合集成到自動化優化平台。

實戰建議:壓縮建議落地前的三步驗證

  1. 現有索引審計: 查詢 SYSCAT.INDEXES 與 SYSCAT.INDEXCOLUSE,避免重複建索引
  2. 維護成本試算: 參考 ESTIMATED_CREATION_TIME 與表寫入頻率,評估 INSERT/UPDATE 性能影響
  3. 創建前後對比: 建索引前後收集 SNAPSHOT/EXPLAIN,量化查詢成本下降幅度

所需 PTF 前置條件

服務端需安裝 V5R4M0 5722-SS1 PTF:SI25391、SI25469、SI25470。客戶端需最新 iSeries Access SP。

結語

Index Advice Condenser 將「被動記錄」升級為「主動推薦」,配合 Navigator 可視化與 UDTF 可編程接口,構建了從發現、聚合、評估到落地的閉環。建議納入週度 DBA 巡檢流程,讓索引策略隨業務演進持續優化。

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