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

深入解析 DB2 優化器:基於成本的優化策略與統計信息收集

     編輯:DB2 教學

DB2 優化器概述

與 Oracle 類似,DB2 也是透過優化器分析 SQL,生成其認為最優的執行計劃。DB2 優化器本質上是一組標準規則集合,我們只需告訴 DB2「要檢索什麼」,而非「如何檢索」。

優化器的決策依據:成本模型

DB2 採用基於成本的優化器 (CBO),應用查詢成本公式,對每條可能的存取路徑進行評估與權衡,四大核心因素包括:

  • CPU 成本
  • I/O 成本
  • DB2 系統目錄中的統計信息
  • 實際的 SQL 語句

優化器工作流程

  1. 接收 SQL 語句後,首先校驗語法正確性。
  2. 根據當前系統環境信息,生成最優執行計劃。
  3. 將 SQL 轉譯為機器指令並執行優化後的 SQL。
  4. 返回結果或儲存以便未來執行。

統計信息的關鍵角色

DB2 系統目錄中的統計信息是優化器正確工作的核心依據,主要包含:

  • 表統計:記錄數、頁面數、PCTFREE、COMPRESS 等(視圖:sysstat.tables、syscat.tables)。
  • 欄位統計:欄位數量、長度、分布特徵、COMPRESS 等(視圖:sysstat.columns、syscat.columns)。
  • 索引統計:是否存在索引、索引組織(葉子頁數量、層級數)、索引鍵離散值數量、是否為叢集索引(視圖:sysstat.indexes、syscat.indexes)。
  • 其他:分區/節點組信息、表空間信息。

及時更新統計信息的工具與方法

RUNSTATS 與 REORGCHK

RUNSTATS 用於收集資料庫物件狀態信息,對生成合理存取計劃至關重要。以下情況建議執行 RUNSTATS:

  1. 建立索引後(常被忽略)。DB2 8.2 可在建立索引時立即更新統計信息。
  2. 執行 REORG 後(會修改高水位等信息)。
  3. 表數據發生較大變化(約 10%-20%)。大表可使用抽樣(如 20%),前提是數據分布均勻。
  4. 使用 REDISTRIBUTE DATABASE PARTITION GROUP 後。

語法範例(表 DB2INST1.STAFF 有索引):

db2 runstats on table db2inst1.staff with distribution and detailed indexes all

實務上常將 REORG、RUNSTATS、REBIND 結合定時執行。對於數據量快速變化的表(如電信月結匯總表),可設為 VOLATILE:

alter table table_name volatile cardinality

此舉使優化器傾向使用索引掃描而非表掃描。

REORGCHK 可根據統計公式判斷表是否需重整:

# 系統表
db2 reorgchk update statistics on table system
# 用戶表
db2 reorgchk update statistics on table user

注意:大數據量操作耗時較長,建議在閒時執行。DB2 8.2 支援自動統計收集,但會帶來額外負載,通常建議關閉:

db2 update db cfg using AUTO_MAINT off AUTO_TBL_MAINT off AUTO_RUNSTATS off

LOAD 工具影響統計信息

LOAD 是高效的大批量數據遷移工具(不記日誌)。使用 STATISTICS 選項可在裝載過程中生成統計數據:

# 詳細統計
load from mobile_number.del of del replace into mobile statistics yes with distribution and detailed indexes all
# 簡略統計
load from mobile_number.del of del replace into mobile statistics yes and indexes all
# DB2 8.2 使用設定檔
load from mobile_number.del of del replace into mobile statistics use profile

DB2LOOK 遷移統計信息

db2look 可抽取資料庫結構與統計信息,常用於開發/生產環境同步執行計劃:

# 1. 用戶環境提取
db2 runstats on table .
db2look -d  -t 
-m -o statis.sql db2 -svtf statis.sql # 2. 測試環境應用統計信息

總結

本文介紹 DB2 更新執行計劃的常見方法。實際環境千差萬別,但核心原則不變:基於成本的優化器決定 SQL 效率,而正確、及時收集統計信息是生成正確執行計劃的關鍵。

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