DB2 自调优内存管理器日志分析器

从 IBM® DB2® for Linux®, UNIX®, and Windows® 9 开始,DB2 有了一个新的内存调优特性 —— 自调优内存管理器(Self-tuning Memory Manager,STMM),它会自动设置几个重要的内存配置参数,从而简化内存配置任务。本文介绍一个用来分析 STMM 日志文件的简单工具,从而帮助监视内存管理器做出的决策。本文已经更新以反映日志分析器的重要改进。

Askari Naqvi, 软件开发分析师, WSO2 Inc

作者照片:Askari NaquviAskari Naqvi 是 IBM Toronto Lab 的 DB2 部门的成员。在过去六年,他从事过多个 DB2 版本的多项关键特性和改进。重要的一些项目包括 DB2 Satellite、DB2 Query Patroller、Autonomics、Automatic Tablespaces 和 STMM。当前,他主要从事 Workload Management 和改进的 Storage Management。Askari 拥有蒙特利尔 McGill University 的计算机科学硕士学位。



Christian Garcia-Arellano, 软件开发人员, WSO2 Inc

作者照片:Christian Garcia-ArellanoChristian Garcia-Arellano 是 IBM Toronto Lab 的 DB2 Engine Development 团队的成员。在过去五年,他主要从事与内存相关的几项 DB2 改进,包括 STMM 的设计和开发。其他项目包括改进 Configuration Advisor、排序内存管理和研究联机内存调优对正在运行的工作负载的影响。他还从事过 Design Advisor 等自治项目。



Haysam Alsayed, 软件测试员, WSO2 Inc

作者照片:Haysam AlsayedHaysam Alsayed 是 IBM Toronto Lab 的 DB2 System Verification 团队的成员。Haysam 于 2006 年 5 月加入 IBM 并在 University of Calgary 的 Schulich School of Engineering 学习软件工程。到目前为止,Haysam 的主要工作是在 z/os 和 iSeries 等各种主机服务器上测试 DB2 Connect 产品。Haysam 还参与了 DB2 9 的测试,包括 STMM、DB2 Connect 和 Security 的集成特性。



Adam Storm, 软件开发人员, WSO2 Inc

作者照片:Adam StormAdam Storm 是 IBM Toronto Lab 的 DB2 Engine Development 团队的成员。在过去七年,他主要从事与内存相关的几项 DB2 改进。这些项目包括改进 DB2 Configuration Advisor、开发 DB2 Memory Tracker 和 DB2 Memory Visualizer。他还从事过其他自治项目,包括 db2support 工具和 DB2 Design Advisor。最近,Adam 担任 STMM for DB2 9 的开发负责人。



2009 年 2 月 09 日

要点:在阅读本文之前,请先阅读 免责声明

简介

在启用时,内存调优器会动态地把可用的内存资源分配给多个内存消耗者,包括排序堆、包缓存、锁列表和缓冲区池。此特性会反复地小幅修改内存配置,以改进系统的总体性能。

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 日志文件中存在。
  • 为了获得最佳结果,在每次运行此工具时只指定一个选项(mso),这可以确保结果便于理解。
  • 如果在运行时不指定选项,那么默认显示新的大小,相当于使用 s 选项。
  • 脚本中包含选项的详细列表,包括上面给出的示例。
  • 在运行此工具的系统上,要求安装 Perl 解释器。如果系统上没有 Perl 解释器,可以从 http://www.perl.org 下载。在下载并安装此软件之前,一定要检查您的单位对使用第三方软件的管理策略,确保不会违反规定。
  • 此工具是用 Perl 脚本语言开发的,所以 DBA 可以根据自己的需要修改它。例如,可以改为使用另一种能够导入其他工具的输出格式,从而允许绘制历史数据图。

免责声明

IBM 对于本文档中提到或链接的任何非 IBM 网站或第三方资源不承担任何代表、担保或其他义务。链接到非 IBM 网站并不意味着 IBM 认可这些网站的内容及其使用,或支持这些内容的所有者。另外,即使您从 IBM 网站了解到这些第三方(或通过链接访问它们),您和这些第三方之间的任何交易与 IBM 无关,IBM 不对此负责。因此,IBM 不对这些外部站点或资源的可用性负责,也不对这些站点或资源提供的任何内容、服务、产品或其他东西负责。第三方提供的任何软件受到软件所附的许可协议条款和条件的约束。


下载

描述名字大小
分析 STMM 日志文件的工具parseStmmLogFile.pl44KB

参考资料

学习

获得产品和技术

  • 使用可从 developerWorks 直接下载的 IBM 试用软件 构建您的下一个开发项目。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, Open source
ArticleID=368638
ArticleTitle=DB2 自调优内存管理器日志分析器
publish-date=02092009