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

使用 db2look 重建優化器存取路徑(四):-m 統計資料參數的關鍵性與不一致處理

     編輯:DB2 教學

統計資料不一致導致 SQL1227N

實驗建立唯一索引 NAME_IND 於 STAFF(name,id),執行 RUNSTATS WITH DISTRIBUTION AND INDEXES ALL 後查詢:

SELECT name FROM staff WHERE id=10 ORDER BY name

生產存取路徑為 IXSCAN NAME_IND,成本 0.111。

手工修改統計資料模擬不一致

  1. 收集 db2look -d sample -e -a -m -t STAFF -o db2look.out
  2. 修改 db2look.out 中索引統計:FIRSTKEYCARD、FULLKEYCARD、NUMRIDS 從 35 改為 37。
  3. 執行 db2 -tvf db2look.out,報錯:
SQL1227N The catalog statistic "37" for column "FULLKEYCARD"
is out of range ... Reason Code = "8".

原因:FULLKEYCARD (37) > TABLE CARD (35),違反統計資料一致性約束。

修正與驗證

  • 將索引統計改回 35,重新執行 db2look.out 成功。
  • 再次查詢,存取路徑變為 TBSCAN + SORT,成本 12.972,與原 IXSCAN 差異極大。

實務啟示

  1. -m 參數產生的統計更新指令必須全部成功,否則優化器行為將偏離生產環境。
  2. 生產環境若在 RUNSTATS 期間有寫入活動,極易產生表/索引統計不一致(CARD vs FIRSTKEYCARD)。
  3. 測試環境重建時,務必檢查 db2look_output.out 所有錯誤並手工修正統計值,確保邏輯一致(如 FULLKEYCARD <= CARD)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved