從 IBM® DB2® for Linux®, UNIX®, and Windows® 9 開始,DB2 有了一個新的內存調優特性 —— 自調優內存管理器(Self-tuning Memory Manager,STMM),它會自動設置幾個重要的內存配置參數,從而簡化內存配置任務。本文介紹一個用來分析 STMM 日誌文件的簡單工具,從而幫助監視內存管理器做出的決策。本文已經更新以反映日誌分析器的重要改進。
要點:在閱讀本文之前,請先閱讀 免責聲明。
簡介
在啟用時,內存調優器會動態地把可用的內存資源分配給多個內存消耗者,包括排序堆、包緩存、鎖列表和緩衝區池。此特性會反覆地小幅修改內存配置,以改進系統的總體性能。
STMM 所做的所有修改會記錄在兩個位置:db2diag.log 和 STMM 日誌文件。下面討論這兩個日誌文件的內容,以及如何使用 db2diag 工具和 parseStmmLogFile.pl 工具監視 STMM 所做的修改。
STMM 的工作方式
STMM 在新的內部指標的幫助下做出決策,這些指標預測增加內存對給定的堆的影響。通過與 STMM 的高級調優演算法結合使用,在大多數情況下,這些指標可以在一小時內把系統從開箱即用配置調整到接近最優的內存使用狀態。但是,在系統調優過程中,STMM 可能做出數百個調優決策,每個決策都會導致修改配置參數或緩衝區池大小。配置文件只反映最近的修改,所以要想了解配置參數或緩衝區池的修改歷史,就需要查看 db2diag.log 和 STMM 日誌文件。
通過 db2diag.log 文件監視修改
db2diag.log 文件存儲內存管理器所做的每次配置修改的簡單信息。在此文件中,可以看到表示配置修改的記錄,見清單 1:
2006-10-17-19.10.00.912218-240 I408210A457 LEVEL: Event PID : 946302 TID : 1 PROC : db2stmm (MYDB1) 1 INSTANCE: ewhhr NODE : 001 DB : MYDB1 APPHDL : 1-52 APPID: *N1.cgarciaa.060809150048 AUTHID : CGARCIAA FUNCTION: DB2 UDB, config/install, sqlfLogUpdateCfgParam, probe:20 CHANGE : STMM CFG DB DEWHR000: "Sheapthres_shr" From: "109306" <automatic> To: "105115" <automatic> |
注意,上面的記錄在配置修改前面加上了 “STMM CFG”,這表示這項修改是由 STMM 執行的,而不是用戶所做的配置更新。還可以看到表示緩衝區池修改的記錄,見清單 2:
2006-10-17-19.03.58.672185-240 I395047A488 LEVEL: Event PID : 946302 TID : 1 PROC : db2stmm (MYDB1) 1 INSTANCE: ewhhr NODE : 001 APPHDL : 1-52 APPID: *N1.cgarciaa.060809150048 AUTHID : CGARCIAA FUNCTION: DB2 UDB, buffer pool services, sqlbAlterBufferPoolAct, probe:90 MESSAGE : Altering bufferpool “BUFFERPOOL_16K" From: “117268" <automatic> To: “109666" <automatic> |
可以使用 db2diag 工具過濾出 db2diag.log 中的這些記錄。例如,下面的命令查看對緩衝區池大小所做的所有修改:
db2diag -g "message:=Altering bufferpool" db2diag.log |
對於通過使用 DB2 的數據分區特性建立多個分區的資料庫,可以使用 -node 選項過濾出對每個分區所做的修改。例如,下面的命令過濾出對分區 1 的所有資料庫配置更新:
db2diag -node 1 -g "changeevent:=CFG DB" db2diag.log |
STMM 日誌
除了 db2diag.log 文件中的日誌項之外,還在 STMM 日誌中記錄更詳細的修改信息。STMM 日誌存儲在 db2diag.log 文件所在的目錄中的 stmmlog 子目錄中。STMM 日誌的主要用途是供 DB2 支持人員在判斷問題時使用。但是,STMM 日誌中的一些調優信息可以幫助 DBA 理解 STMM 所做的調優決策。STMM 日誌中的每個日誌項記錄在做出調優決策之前收集的統計數據,以及根據這些統計數據執行的操作。STMM 分割為最多五個文件,每個文件的最大大小為 10MB。按照一種循環方式維護這些日誌文件,在創建新文件之前會刪除最老的文件。
STMM 日誌文件分析器的目的是過濾出重要的調優信息並進行格式化,從而便於了解內存配置的修改過程。
分析 STMM 日誌文件
分析工具 parseStmmLogFile.pl 採用以下語法:
parseStmmLogFile.pl <log file> <database name> <options> |
此工具生成的輸出採用表格形式。無論用戶選擇什麼選項,表格的前四列都是相同的。前四列是:
清單 6 給出前四列的一個示例,其中包含兩次調優。
[ MEMORY TUNER - LOG ENTRIES ] [ Interv ] [ Date ] [ totSec ] [ secDif ] [ ] [ ] [ ] [ ] [ 1 ] [ 02/01/2006 09:45:02 ] [ 76 ] [ 76 ] [ 2 ] [ 02/01/2006 09:46:03 ] [ 137 ] [ 61 ] |
根據選擇的選項不同,此工具會分析 STMM 日誌文件並收集相關的詳細信息。下面是可以選用的四個選項:
另外,還有兩個用來調整輸出的可選標誌(必須與上面的選項之一一起使用):
示例 1. 調整堆大小的歷史
此示例顯示 STMM 執行的配置參數和緩衝區池修改。
在清單 7 中,parserStmmLogfile.pl 命令顯示兩次調優的信息。第一次調優開始於創建這個 STMM 日誌文件后 76 秒,調整的兩個參數是 SHEAPTHRES_SHR 和 PCKCACHESZ。第二行顯示的第二次調優開始於 61 秒之後,它把 1000 個頁面從 PCKCACHESZ 轉移到 SHEAPTHRES_SHR。
$ 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 ] |
示例 2. 調整資料庫內存大小的歷史
下面的命令輸出資料庫內存調優決策的基本信息。輸出的信息包括內存調優器判斷出的系統內存總量 (configMem)、DB2 可以使用的物理內存量 DB2 (memAvail) 以及由 DATABASE_MEMORY 配置參數指定的當前資料庫共享內存量 (setConfSz)。
$ 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 ] |
示例 3. 調整 SORTHEAP 大小的歷史
下面的命令輸出 SORTHEAP 配置參數值的調優信息。每行表示對 SORTHEAP 值的一次成功的自動更新。輸出的信息包括 SORTHEAP 配置參數以前的值 (OLD)、當前值 (NEW) 以及內存調優器計算出的最小值和最大值 (min 和 max)。
$ 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 ] |
提示和技巧
[火星人 ] DB2 自調優內存管理器日誌分析器已經有576次圍觀