簡介
在啟用時,內存調優器會動態地把可用的內存資源分配給多個內存消耗者,包括排序堆、包緩存、鎖列表和緩沖區池。此特性會反復地小幅修改內存配置,以改進系統的總體性能。
STMM 所做的所有修改會記錄在兩個位置:db2diag.log 和 STMM 日志文件。下面討論這兩個日志文件的內容,以及如何使用 db2diag 工具和 parseStmmLogFile.pl 工具監視 STMM 所做的修改。
STMM 的工作方式
STMM 在新的內部指標的幫助下做出決策,這些指標預測增加內存對給定的堆的影響。通過與 STMM 的高級調優算法結合使用,在大多數情況下,這些指標可以在一小時內把系統從開箱即用配置調整到接近最優的內存使用狀態。但是,在系統調優過程中,STMM 可能做出數百個調優決策,每個決策都會導致修改配置參數或緩沖區池大小。配置文件只反映最近的修改,所以要想了解配置參數或緩沖區池的修改歷史,就需要查看 db2diag.log 和 STMM 日志文件。
通過 db2diag.log 文件監視修改
db2diag.log 文件存儲內存管理器所做的每次配置修改的簡單信息。在此文件中,可以看到表示配置修改的記錄,見清單 1:
清單 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:
清單 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 中的這些記錄。例如,下面的命令查看對緩沖區池大小所做的所有修改:
清單 3. 查看緩沖區池修改的 db2diag 命令
db2diag -g "message:=Altering bufferpool" db2diag.log
對於通過使用 DB2 的數據分區特性建立多個分區的數據庫,可以使用 -node 選項過濾出對每個分區所做的修改。例如,下面的命令過濾出對分區 1 的所有數據庫配置更新:
清單 4. 查看配置修改的 db2diag 命令
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 采用以下語法:
清單 5. parseStmmLogFile.pl 語法
parseStmmLogFile.pl <log file> <database name> <options>
此工具生成的輸出采用表格形式。無論用戶選擇什麼選項,表格的前四列都是相同的。前四列是:
調優號
發生這次調優的時間
從日志文件中第一次調優以來的總秒數
從前一次調優開始以來的秒數。這個值包含調整內存堆大小花費的時間和收集調優決策所需的統計數據花費的時間。
清單 6 給出前四列的一個示例,其中包含兩次調優。
清單 6. parseStmmLogFile.pl 示例輸出
[ 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 日志文件並收集相關的詳細信息。下面是可以選用的四個選項:
(s) — 顯示所有內存消耗者的新大小(默認選項)。
(m) — 顯示所有內存消耗者的最小大小。
(b) — 顯示所有內存消耗者的收益數據。收益數據表示增加內存給所有內存消耗者帶來了多大好處。
(o) — 顯示 DATABASE_MEMORY 調優信息。
另外,還有兩個用來調整輸出的可選標志(必須與上面的選項之一一起使用):
(4) — 把所有內存消耗者轉換為以 4KB 頁面作為大小單位。
(d) — 生成以分號分隔的輸出。此選項有助於把分析器輸出導入到電子表格中。
示例 1. 調整堆大小的歷史
此示例顯示 STMM 執行的配置參數和緩沖區池修改。
在清單 7 中,parserStmmLogfile.pl 命令顯示兩次調優的信息。第一次調優開始於創建這個 STMM 日志文件後 76 秒,調整的兩個參數是 SHEAPTHRES_SHR 和 PCKCACHESZ。第二行顯示的第二次調優開始於 61 秒之後,它把 1000 個頁面從 PCKCACHESZ 轉移到 SHEAPTHRES_SHR。
清單 7. 調優的示例輸出
$ 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)。
清單 8. 數據庫內存調優的示例輸出
$ 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)。
清單 9. SORTHEAP 調優的示例輸出
$ 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 ]
提示和技巧
在運行此工具時指定的數據庫名必須在 STMM 日志文件中存在。
為了獲得最佳結果,在每次運行此工具時只指定一個選項(m、s 或 o),這可以確保結果便於理解。
如果在運行時不指定選項,那麼默認顯示新的大小,相當於使用 s 選項。
腳本中包含選項的詳細列表,包括上面給出的示例。
在運行此工具的系統上,要求安裝 Perl 解釋器。如果系統上沒有 Perl 解釋器,可以從 http://www.perl.org 下載。在下載並安裝此軟件之前,一定要檢查您的單位對使用第三方軟件的管理策略,確保不會違反規定。
此工具是用 Perl 腳本語言開發的,所以 DBA 可以根據自己的需要修改它。例如,可以改為使用另一種能夠導入其他工具的輸出格式,從而允許繪制歷史數據圖。