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

DB2 效能調優實戰問答:AIX/EMC 環境、大表索引關聯、STMM、分區並行、db2advis 索引建議、執行計劃分析

     編輯:DB2 教學

真實生產環境:AIX、8GB 記憶體、EMC 140GB、表結構四類 (業務表 300-400 張/主表 10 張 300萬列/索引表 10 張 1000萬列/系統表 100 張),核心查詢為索引表與主表關聯。專家提供存儲、OS、資料庫、SQL、監控五大維度具體可執行建議。

環境基線

  • 硬體:AIX、8GB RAM、EMC 140GB (RAID)、本地磁碟 140GB
  • 資料結構:
    1. 業務表:300-400 張,最大 100萬列
    2. 核心主表:~10 張,最大 300萬列 (含 tdBase 及子表)
    3. 索引表:~10 張,4 欄位,最大 1000萬列 (tdBase 拆分衍生)
    4. 系統表:~100 張
  • 遷移來源:MS SQL Server → DB2
  • 核心負載:索引表與主表關聯查詢為主

專家建議完整版

一、存儲層面 (EMC RAID 規劃)

  1. LUN/RAID Group 設計:單一 RG 包含更多物理磁碟 (建議 8-16 顆),提升 IOPS 與頻寬。
  2. Container 隔離:一 Container 對應一完整 RG,避免多 Container 爭搶同一 RG。
  3. 日誌專用 RG:交易日誌置於獨立 RAID 1/10,確保寫入延遲最低。
  4. 索引表獨立 RG:10 張大索引表放置於獨立 RG + 獨立 Container + 獨立 Bufferpool。

二、AIX OS 層面

  1. File Cache 限制:
    vmo -o minperm%=5 -o maxperm%=90 -o maxclient%=90 -o lru_file_repage=0
    防止 JFS2 快取佔用記憶體導致 Paging Storm。
  2. AIO 伺服器充足:
    chdev -l aio0 -a maxreqs=65536 -a minservers=20 -a maxservers=200
  3. 大頁面記憶體:vmo -o lgpg_regions=256 -o lgpg_size=16777216 (視實體 RAM 調整),減少 TLB Miss。

三、資料庫層面

  1. 啟用 STMM (Self-Tuning Memory Manager):強烈建議,除非極資深專家。
    db2 update db cfg for sample using SELF_TUNING_MEM ON
    db2 update db cfg for sample using DATABASE_MEMORY AUTOMATIC
  2. 表空間與 Bufferpool 策略:
    • 索引表 → 獨立表空間 (TS_IDX) + 獨立 Bufferpool (BP_IDX, SIZE 自動)
    • 主表 → 獨立表空間 (TS_MAIN) + 獨立 Bufferpool (BP_MAIN)
    • 業務/系統表 → 共享表空間 (TS_COMMON) + IBMDEFAULTBP
  3. PREFETCHSIZE = EXTENTSIZE × Container數:最大化預讀。
  4. 啟用主動頁清除:CHNGPGS_THRESH=60, NUM_IOCLEANERS=AUTOMATIC。
  5. 啟用表空間並行 IO:db2set DB2_PARALLEL_IO=*。
  6. 分區內並行:SMP 啟用 INTRA_PARALLEL=ON, MAX_QUERYDEGREE=ANY。
  7. 大表分區 / MDC:
    • tdBase 300萬列 → 範圍分區表 (按日期/區域)
    • 索引表 1000萬列、多維查詢 → 考慮 MDC (多維叢集)

四、SQL 調優

  1. db2advis 索引建議:收集代表性工作負載 SQL,跑 db2advis -d sample -w workload.sql -l,依建議建立索引。
  2. 定期 RUNSTATS:RUNSTATS ON TABLE schema.* WITH DISTRIBUTION AND DETAILED INDEXES ALL,確保統計最新。
  3. 執行計劃分析:db2exfmt / db2caem,重點消除 Residual Predicates (索引無法完全過濾、需再讀表過濾)。
  4. 關聯查詢優化:
    • 索引表 4 欄位 → 建立複合索引支援 JOIN 條件
    • 主表連接鍵 → 確保有索引、統計準確
    • 考慮 MQT (Materialized Query Table) 預計算常用關聯

五、運行後持續監控

工具關鍵指標健康閾值
topas / vmstat / iostatCPU%, RunQ, %iowait, PgSpIn/Out, Disk Busy%%iowait < 20%, PgSpIn/Out ≈ 0
db2pd -bufferpoolsHit Ratio, Async Read/Write RatioHit Ratio > 95%
db2pd -sortSort Overflow, Sort Heap UsageOverflow = 0
db2pd -locksLock Wait Time, Deadlocks, EscalationsWait Time < 1s, Deadlocks = 0
db2pd -tcbstatsTable Scan, Index Scan, Rows Read/WriteIndex Scan 佔比 > 90%

遷移特殊注意事項 (MS SQL → DB2)

  • 資料類型映射:MONEY → DECIMAL(19,4), DATETIME → TIMESTAMP, UNIQUEIDENTIFIER → CHAR(16) FOR BIT DATA。
  • T-SQL → SQL PL 改寫:ISNULL → COALESCE, GETDATE() → CURRENT TIMESTAMP, TOP n → FETCH FIRST n ROWS ONLY。
  • 統計資訊重建:遷移後必須全庫 RUNSTATS + REORGCHK + REBIND。
  • 應用連線池:調整 BLOCKING ALL, DEFERPREP, KEEPDYNAMIC YES。

執行優先級建議

  1. 存儲/OS 基線調優 (第 1-2 週)
  2. 啟用 STMM、配置表空間/Bufferpool (第 2 週)
  3. 收集工作負載、跑 db2advis、建立關鍵索引 (第 3 週)
  4. 分區/MDC 重設計大表 (第 4-6 週,需停機窗口)
  5. 持續監控、微調 SQL、優化關聯查詢 (長期)

系統性落地專家建議,配合持續監控體系,能將遷移後 DB2 效能穩定在目標 SLA 內,避免「上線後再調」的被動局面。

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