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

DB2 自適應記憶體管理器(STMM)日誌深度分析與監控實戰

     編輯:DB2 教學

前言:看不見的調優大師

DB2 Self-Tuning Memory Manager (STMM) 啟用後,會動態將記憶體分配給排序堆、套件快取、鎖清單、緩衝區池等消費者,透過內部指標預測增減記憶體對效能的影響,通常一小時內從出廠預設調至近似最佳狀態。但調優過程可能產生數百次決策,配置檔僅反映最新值——若要回溯歷史、診斷異常,必須分析日誌。

雙重日誌機制

日誌位置內容特色主要用途
db2diag.log診斷目錄(diagpath)每次配置變更的簡要記錄,標註「STMM CFG」快速檢視近期調優動作
STMM 專屬日誌diagpath/stmmlog/決策前統計數據、執行動作、收益預測等完整細節深度分析、支援人員診斷、繪製趨勢圖

db2diag.log 關鍵記錄範例

資料庫配置參數變更

2006-10-17-19.10.00.912218-240 I408210A457 LEVEL: Event
PID : 946302 TID : 1 PROC : db2stmm (MYDB1) 1
FUNCTION: DB2 UDB, config/install, sqlfLogUpdateCfgParam, probe:20
CHANGE : STMM CFG DB DEWHR000: "Sheapthres_shr" From: "109306" <automatic>
 To: "105115" <automatic>

關鍵標記:STMM CFG 表示由 STMM 執行,非人工修改。

緩衝區池大小變更

2006-10-17-19.03.58.672185-240 I395047A488 LEVEL: Event
FUNCTION: DB2 UDB, buffer pool services, sqlbAlterBufferPoolAct, probe:90
MESSAGE : Altering bufferpool "BUFFERPOOL_16K" From: "117268" <automatic>
 To: "109666" <automatic>

db2diag 過濾指令速查

# 只看緩衝區池變更
db2diag -g "message:=Altering bufferpool" db2diag.log

# 分區資料庫:只看節點 1 的配置變更
db2diag -node 1 -g "changeevent:=CFG DB" db2diag.log

STMM 專屬日誌結構

  • 位置:$diagpath/stmmlog/
  • 最多 5 個檔案,單檔上限 10 MB,循環覆寫(最舊先刪)
  • 每筆記錄含:決策前統計、執行動作、收益預測

分析利器:parseStmmLogFile.pl

語法

parseStmmLogFile.pl <log_file> <database_name> [options]

固定前四欄(所有模式共通)

欄位意義
Interval調優序號
Date發生時間
totSec從首次調優起累積秒數
secDif距上次調優間隔秒數(含統計蒐集與調整耗時)

四大分析模式

選項輸出焦點典型用途
s (預設)所有消費者新大小追蹤各堆/緩衝區池大小演變
m所有消費者最小大小檢查是否觸及下限
b所有消費者收益數據評估增減記憶體的預期效益
oDATABASE_MEMORY 調優資訊監控總共享記憶體擴縮決策

兩個輸出調整旗標(需搭配上述模式)

  • 4:以 4KB 頁面為單位顯示大小
  • d:分號分隔輸出,便於匯入 Excel

實戰範例 1:堆/快取大小演變(-s)

$ parseStmmLogFile.pl stmm.0.log mydbname s
[ MEMORY TUNER - LOG ENTRIES ]
[ Interv ] [ Date ] [ totSec ] [ secDif ] [ newSz ]
[ ] [ ] [ ] [ ] [ SHEAPTHRES_SHR PCKCACHESZ ]
[ 1 ] [ 02/01/2006 09:45:02 ] [ 76 ] [ 76 ] [ 31482 19438 ]
[ 2 ] [ 02/01/2006 09:46:03 ] [ 137 ] [ 61 ] [ 32482 18438 ]

解讀:第 1 次調優設定共享排序堆 31482、套件快取 19438;61 秒後第 2 次將 1000 頁從快取移給排序堆。

實戰範例 2:資料庫總記憶體決策(-o)

$ parseStmmLogFile.pl stmm.0.log mydbname o
[ MEMORY TUNER - DATABASE MEMORY AND OVERFLOW BUFFER TUNING - OG ENTRIES ]
[ Interv ][ Date ][ totSec ][ secDif ][ configMem ][ memAvail ][ setCfgSz ]
[ 1 ][ 02/01/2006 09:45:02 ][ 76 ][ 76 ][ N/A ][ N/A ][ N/A ]
[ 2 ][ 02/01/2006 09:46:03 ][ 137 ][ 61 ][ 4194304 ][ 1559966 ][ 62224 ]

欄位含義:configMem=系統總記憶體、memAvail=DB2 可用物理記憶體、setCfgSz=DATABASE_MEMORY 目前設定值。

實戰範例 3:SORTHEAP 調優驗證記錄(-v)

$ parseStmmLogFile.pl stmm.0.log mydbname v
[ SORTHEAP TUNING - SORTHEAP CHANGE VALIDATION RECORDS ]
[ Date ][ totSec ][ secDif ][ SHEAPTHRES_SHR ][ OLD ][ NEW ][ min ][ max ]
[ 02/01/2006 14:51:01 ][ 184 ][ 184 ][ 11212 ][ 373 ][ 560 ][ 224 ][ 2243 ]

顯示 SORTHEAP 從 373 調至 560,STMM 計算的最小/最大合理值為 224/2243。

進階技巧與自訂化

  • 單模式單跑:每次只指定 -s/-m/-b/-o 之一,輸出最清晰
  • 資料庫名必須存在於日誌中,否則無輸出
  • 需 Perl 解釋器(perl.org),企業政策允許下再安裝
  • 腳本開源可改**:可改寫輸出格式(JSON、CSV)、整合 Grafana/Prometheus 繪製歷史趨勢圖

總結:從「黑箱」到「可觀測」

STMM 讓 DBA 免于手動調參,但日誌分析能力決定你能否信任它、驗證它、在異常時介入。掌握 db2diag 快速過濾與 parseStmmLogFile.pl 深度剖析,配合 -d 匯出數據建立監控儀表板,即可將自動調優從「信仰」轉為「可視化的治理」。

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