與 Oracle 類似,DB2 也是透過優化器分析 SQL,生成其認為最優的執行計劃。DB2 優化器本質上是一組標準規則集合,我們只需告訴 DB2「要檢索什麼」,而非「如何檢索」。
DB2 採用基於成本的優化器 (CBO),應用查詢成本公式,對每條可能的存取路徑進行評估與權衡,四大核心因素包括:
DB2 系統目錄中的統計信息是優化器正確工作的核心依據,主要包含:
sysstat.tables、syscat.tables)。sysstat.columns、syscat.columns)。sysstat.indexes、syscat.indexes)。RUNSTATS 用於收集資料庫物件狀態信息,對生成合理存取計劃至關重要。以下情況建議執行 RUNSTATS:
REORG 後(會修改高水位等信息)。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 是高效的大批量數據遷移工具(不記日誌)。使用 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 可抽取資料庫結構與統計信息,常用於開發/生產環境同步執行計劃:
# 1. 用戶環境提取
db2 runstats on table .
db2look -d -t -m -o statis.sql
db2 -svtf statis.sql
# 2. 測試環境應用統計信息
總結
本文介紹 DB2 更新執行計劃的常見方法。實際環境千差萬別,但核心原則不變:基於成本的優化器決定 SQL 效率,而正確、及時收集統計信息是生成正確執行計劃的關鍵。
- 上一篇文章: DB2 V9 for z/OS 類型 2 連接的多行獲取 (MRF) 支援指南
- 下一篇文章: IBM DB2 數據庫性能監控完整步驟指南
DB2 NOT FOUND 異常處理兩大方案:CONTINUE HANDLER 與 SQLCODE 100 直接判斷,含 SQLCODE 變化機制解析
報表開發實戰:動態多層次 KPI 鑽取報表(腳本 + 本地檔案篇)
基於 DB2 + PHP 的應用系統跨平台遷移實戰:AIX → Linux 全流程指南
DB2 9 pureXML 實戰:解析與再利用 ODF / Office 2007 文檔的端到端方案
DB2 程式設計技巧詳解 (四) - COALESCE、ROW_COUNT、結果集回傳、型別轉換、SP 呼叫
DB2 運維筆記精華:歸檔、不記錄日誌、備份優化與檔案命名規範
Optim Data Privacy 解決方案:開放平台自訂資料轉換三大技術實戰
Copyright © 程式碼之家 All Rights Reserved