内容


监控和调优 InfoSphere Master Data Management Server,第 2 部分

监控 DB2 层并了解不同的监控工具

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 监控和调优 InfoSphere Master Data Management Server,第 2 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:监控和调优 InfoSphere Master Data Management Server,第 2 部分

敬请期待该系列的后续内容。

简介

这是本系列文章的第 2 部分,介绍如何有效监控和调优 IBM InfoSphere Master Data Management Server (MDM Server) 栈,实现 MDM Server 整体性能优化。第 1 部分:设置目标和调优基础架构的每一层 介绍关于如何有效监控、调优和优化 MDM Server 和 WebSphere Application Server 层实现性能优化的重要准则,简要讨论在这两个层中影响性能的关键领域和功能列表的最佳实践。第 2 部分重点介绍如何有效监控和调优 DB2 层。本文也介绍了监控操作系统级资源的常用工具。

监控 MDM Server 数据库并调优 AIX 上的 DB2

与监控和调优 MDM Server 栈其他层一样重要,监控和调优数据库层是优化 MDM 系统性能的关键。一般来说,普通 DB2 最佳实践也适用。调整 MDM 数据库确实没有什么特别的。最重要的实践是定期监控并积极主动地计划调优和优化,以避免对生产系统的负面影响。本小节包括在您 MDM 系统的 DB2 数据中监控什么以及如何监控的一些基本建议,也介绍了几个专用于 MDM Server 数据库的已知调优技巧。

这有多种工具可供您用来监控和分析 DB2 性能。例如,传统上您可以依赖快照和事件监控器进行性能监控和评估。近期发布的 DB2 版本仍然支持此方法。但是,从 DB2 9.7 版本开始,表功能可作为一个轻量级替代方案来进行传统系统监控。这些新的表功能计划在最新 DB2 版本中更新和增强,而快照接口将不再更新。更多细节,见 参考资料 链接访问产品手册和 DB2 信息中心。还有很多商业工具,对于终端用户而言,可利用相同的 DB2 基础监控技术实现相同的监控目标。

本文介绍了新旧 DB2 版本使用的方法。您可以按照步骤进行同样的操作,也可以学习技术和思想,使用不同工具时应用。此外,上述关键信息也可从这些报告提供,比如 DBSUMMARY、CURRENTSQ、CURRENTAPPS、CONNECTION 和 LOCKWAIT,这些是由 DB2 9.7 或者更高版本中的 MONREPORT 模块生成的。

数据库监控

尽管本文重点是监控数据库本身,也就是说,数据库内部发生了什么,但是就内存、CPU 以及输入/输出活动而言,监控 MDM 数据库服务器状态也是很重要的。特别是,密切关注支持 MDM 数据库的输入/输出系统的利用至关重要。

在系统中运行 MDM 工作负载时,您需要确切掌握数据库的执行状况以及 MDM Server 数据库内部发生的一切。有两个主要工具,用途不一,有了它们您就可以访问数据库监控信息:快照监控器和事件监控器。快照监控器允许您捕获特定时间内数据库活动的状态,而事件监控器只在特定数据库事件发生时记录数据。

快照监控器是一个功能强大但简单的监控工具,开销非常少。快照提供的信息不仅是数据库,还有在特定时刻连接到数据库的应用程序信息。为了有效地监控系统,您可以在一天的不同时间段内定期拍摄快照,也可以在较长时间内(包括天、月)定期拍摄快照,或者您可以针对已知为性能敏感的特定工作负载区间。一个周密的监控计划,特别是在性能测试或重要生产工作负载期间,可以帮助实施者预测和计划很多潜在数据库性能问题。

多数监控器的计数器是累计的,反映从您的会话(您从中发布 db2 命令)中最后一次快照监控器复位起的具体活动的总数。如果没有发布快照监控器复位,数据将反映从第一个 db2 连接建立起的运行数。通常情况下没有进行复位而收集的数据不是很有用,因为计数器的时间跨度较长,包括随着负荷起伏跌宕截然不同的工作负载。通过快照收集聚焦特定工作负载或时间段揭露工作负载的惟一特性,支持更果断的调优决策。想要更深入地理解优化或问题解决过程中的数据库工作负载,尝试以影响较低的调查技术拍摄快照,每次捕获时监控器都要复位。例如,为了监控一小时内的生产工作负载,可以轻松地构建一个脚本来处理线程 1 和线程 2(如清单 1 所示)之间的逻辑。

清单 1 中的线程 1 用于以 60 秒为时间间隔拍摄多个快照,每次拍摄快照之前监控器都要复位。

清单 1. 线程 1 伪代码
db2 -v update monitor switches using bufferpool on sort on lock on statement on \ 
table on uow on
db2 -v get monitor switches
count = 0
while (count < 10) 
	sleep 300			## not being monitored
db2 -v reset monitor all		## clear the counters
	sleep 60 			## collect data for only 60-second interval
	db2 -v get snapshot for all on <db_name>    2>&1 > snapshot_${count}_withReset.out
end while
db2 -v update monitor switches using bufferpool off sort off lock off \
statement off table off uow off 
db2 -v terminate

清单 2 中的线程 2 用于在整个时间段内拍摄多个快照,在初始复位监控器命令之后没有发出复位监控器命令

清单 2. 线程 2 伪代码
db2 -v update monitor switches using bufferpool on sort on lock on statement on table \
on uow on 
db2 -v get monitor switches
count = 0
while (count < 10) loop 
	sleep 360		## taking a snapshot every 6 minutes
	db2 -v get snapshot for all on <db_name>    2>&1 > snapshot_${count}_NoReset.out
end while
db2 -v update monitor switches using bufferpool off sort off lock off \
statement off table off uow off
db2 -v terminate

分析快照数据时,有一些度量标准需要特别注意。在数据库快照中,注意清单 3 中的计数器并监控这些计数器之间的比例。缓冲池命中率对于监控非常重要。可根据以下计数器计算命中率或通过最新表功能予以报告。

清单 3. 缓冲池命中率计数器
Buffer pool data logical reads             =  
Buffer pool data physical reads            =  
Buffer pool index logical reads            =  
Buffer pool index physical reads           =

显然,随着数据库服务器上物理内存的使用,高缓冲池命中率对于您的数据库性能而言始终比较好。清单 4 中的计数器使您从工作负载的角度对 SQL 分布有一个很好的了解。特别是,选择语句和更新/插入/删除语句之间的比例对于告知数据查询和更新之间的分歧是很有用的。 .

清单 4. SQL 分布
Commit statements attempted                =  
Rollback statements attempted              =  
Dynamic statements attempted               = 
Static statements attempted                =  
Failed statement operations                =  
Select SQL statements executed             =  
Xquery statements executed                 =  
Update/Insert/Delete statements executed   =

清单 5 中的计数器对于告知平均多少行删除、插入、更新、选中和读取都很重要。它们之间的比率是您工作负载的关键参数。比率中的任何显著变化都需要解释,可能意味着潜在问题。特别是,读取和选中的行之间的比率会告诉您是否所有 SQL 语句都正在有效地使用索引。如果该比率非常高,那么可能会导致性能问题。需要更多的调查以分离 SQL 语句,这导致较高的读取/选择比率。因此可能需要一些优化,例如,可能需要提供更好的索引。

清单 5. SQL 分布
Rows deleted                               =  
Rows inserted                              =  
Rows updated                               =  
Rows selected                              =  
Rows read                                  =

在清单 6 中,从根据计数器作为初始步骤的动态 SQL 快照数据中,您可以从总体成本、频率和每次调用成本角度列出最优 SQL 语句。如果其中一些最优 SQL 语句被认为是异常昂贵的,下一步将需要分析 SQL 访问计划,看看是否还可以改进。

清单 6. SQL 分布
Number of executions               =  
Total execution time (sec.microsec)=  
Statement text                     =

从表空间快照数据中可以看出,这些用过的页面对象可用于告知索引、表和数据库的总大小。了解每个对象和整体数据库的增长趋势总是比较好,可以帮助您提前计划磁盘空间需求和数据库调优。在这里您可以根据 Rows Read 和 Rows Written,以及每个活动表的大小和它们各自的增长模式(如清单 7 所示),告知哪个表是最活跃的。

清单 7. SQL 分布
Table Schema        =  
Table Name          =  
Data Object Pages   =  
Index Object Pages  =  
Rows Read           =  
Rows Written        =

事件监控器用于收集数据库以及特定事件发生时连接的应用程序的信息。事件监控器可以捕获的事件包括数据库活动,比如连接、死锁、语句或事务。您可以通过事件类型或者您想要监控的事件来定义一个事件监控器。例如,一个死锁事件监控器可用于监控死锁。当发生死锁时,这个监控器收集相关应用程序、死锁中的 SQL 语句以及引起高争用的锁的信息。

MDM Server 环境中事件监控器的一个常见用途是死锁事件监控,用于了解和解决 MDM Server 数据库中偶尔发生的过度死锁(excessive deadlocks)。默认情况下,所有数据库都有一个名为 DB2DETAILDEADLOCK 的事件监控器,记录死锁事件的详细信息。DB2DETAILDEADLOCK 事件监控器在数据库启动时自动启动。

在格式化事件监控器文件之后,通常您能够找到所有参与死锁的 SQL 语句。通过将这些 SQL 语句关联回到 MDM Server 应用程序层,可以了解导致死锁的应用程序流。这可能是由于自定义逻辑(一个具体用例)或者数据本身(质量和版本)导致的。一旦您了解了原因,就可制定相应决策来解决问题。影响数据库性能的另一个主要因素是输入/输出能力。类似地,密切监控数据库容器驻留的磁盘的利用情况。如果监控显示磁盘间的输入/输出使用不平衡,且一组热磁盘可能成为系统瓶颈,那么做出一个数据库布局调整来最大化输入/输出和减少受限热磁盘的影响。

数据库调优

大多数发生数据库调优的区域对应于之前提到的用于监控的关键区域,本小节讨论具体的调优建议。

DB2 缓冲池调优是最简单的调优步骤之一,可提供快速的性能提升。有了从监控任务中收集的缓冲池运行时统计数据,您就可以知道是否任何性能获益都可以从缓冲池调优实现。通常,推荐一个较高的数据命中率(80% 或更高)和一个相当高的索引命中率(90% 或更高),这也是最理想的。

对于一个大型数据库,增加缓冲池大小可能对缓冲池的命中率有较小的影响。数据页的数量如此之大,以至于统计意义上的命中率不能通过增强其大小来提高。相反,您会发现调优索引缓冲池命中率可以实现预期的结果,这可以通过以下两种方法实现:

  • 将数据和索引分离到两个不同的缓冲池,并分别调优。
  • 使用一个缓冲池,但是增加其大小直至索引命中率停止增长。

第一个方法通常更为高效,但是因为它要求索引和数据驻留在不同的表空间,对于现有数据库不太适用。它也需要调优两个缓冲池,这意味着工作量会略有增加,特别是当内存受限时。

当多个缓冲池同时在用时,缓冲池快照数据可用于计算每个缓冲池的命中率,来表示每个缓冲池的有效性。如果需要的话,从附加内存中减少不起作用的缓冲池的大小,这样可用内存就可以分配给其他低命中率缓冲池,这些缓存池可以从额外内存分配中获得令人瞩目的提升。

影响 SQL 语句性能的另一个重要因素是数据库统计。最新统计数据对于确保最优 SQL 性能总是很重要。最新 DB2 版本支持动态 runstats 作为原子特性的一部分。启动时,动态统计数据集合可通过确保您拥有最新表统计信息来帮助提高数据库性能。如果这不是给定环境的理想选择,您可以在定期维护时间段内显式使用 DB2 runstats 或 reorgchk 命令。

DB2 runstats 命令更新概述数据库表及其相关索引的物理特征的统计数据。动态 SQL 语句自动使用这些更新的统计数据。定期使用 runstats 作为常规数据库维护的一部分。您可以通过使用一个 cron 作业或手动使用一个脚本来使用 runstats。除 runstats 之外,也可运行 DB2 reorgchk 命令来确认是否某个表格或索引的重组是必要的。

清单 8 显示了动态确定运行 runstats 的 MDM Server 数据库表的命令,实际上,ksh 文件运行 runstats 命令。

清单 8. runstats 命令
db2 connect to MDMDB user <uid> using <password>
db2 -x select tabname from syscat.tables where type='T' and tabschema='SCHEMA1' \
| sed -e "s/ *.$//" | sed -e "s/^/db2 -v runstats on table SCHEMA1./" \
| sed -e "s/$/ with distribution and detailed indexes all/" > .\my_runstats.ksh

my_runstats.ksh 文件包含类似清单 9 所示的代码行。

清单 9. runstats 脚本
db2 -v runstats on table SCHEMA1.CONTACT with distribution and detailed indexes all
db2 -v runstats on table SCHEMA1.CONTRACT with distribution and detailed indexes all
db2 -v runstats on table SCHEMA1.ADDRESS  with distribution and detailed indexes all
db2 -v runstats on table SCHEMA1.IDENTIFIER with distribution and detailed indexes all
db2 -v runstats on table SCHEMA1.ADDRESSGROUP with distribution and detailed indexes all

每一个行是一个表或索引上的 runstats 命令。通过运行 my_runstats.ksh 程序,可总结出 MDMDB 的所有表上的性能统计。为了缩短统计数据的更新期限,推荐大家将 ksh 文件分离成几个文件,这样您就可以同时运行多个脚本来更新不同表集合,同时利用 DB2 服务器上的 CPU 电源。为了使用 reorgchk 命令来检查所有表的统计数据,确定是否某个表或索引的重组是必须的,研究清单 10 中命令生成的输出文件。

清单 10. reorgchk 命令
db2 -v connect to MDMDB user <uid> using <password>
db2 -v reorgchk current statistics on table all

某些情况下,reorgchk 命令也可用来更新数据库统计,只需一个简单的命令,如清单 11 所示。但是它不能灵活地运行多个并发脚本,来在同一数据库中根据不同的表来更新统计数据。

清单 11. reorgchk 命令
db2 -v connect to MDMDB user <uid> using <password>
db2 -v reorgchk current statistics on table all    ##old copy of the statistics
db2 -v reorgchk update statistics on table all	   ## update statistics

对于缓慢的事务问题,一般步骤包括:

  • 确定特定 MDM Server 事务
  • 运行特定事务来进一步收集涉及的 SQL 语句
  • 确认性能最差的 SQL 语句

应当解释已发现的有问题的 SQL 语句,以便为特定的调优需求显示访问计划。调优包括添加额外索引来生成一个更高效的访问计划,让表格变幻无常,进而鼓励索引的使用,如果可能的话也可以避免表扫描。有些情况下,开箱即用的 SQL 可被一个根据特定业务需求定制的 SQL 代替。使用可插拔的查询特性满足性能需求。所有这些活动都是在一个 MDM 实现项目的性能测试阶段完成的典型性能调优实践。性能测试阶段是 MDM 项目的一个至关重要的部分,用来验证预定义的性能目标是否符合特定实现。为这一阶段计划充足的时间和资源。

优化 SQL 语句一个最重要的步骤是解释感兴趣的语句和研究其访问计划。第一个目标是排除昂贵的表扫描操作。接着是通过优化访问计划进一步减少 SQL 成本。推荐使用 EXFMT 格式解释输出文件,因为它提供帮助此类 SQL 优化所需的信息。如果 OOTB SQL 由于业务定制和数据的结合而不能提供所需的性能,您可以使用 MDM Server 中的可插拔查询性能重写 SQL 来满足您的特定业务需求。查阅 参考资料 获取如何编写定制 SQL 语句实现性能优化的技巧。

偶尔的一些死锁通常无关紧要。但是当死锁的频率或比例较高时容易出现问题。见 参考资料 获取关于在 DB2 中应用锁避免(lock-avoidance)注册表设置的技术说明。应用这些注册表变量或执行导致 SQL 性能整体增强的其他数据库调优,将有助于减少或消除死锁。

注意 DB2 for z/OS®,它并不是总可以接受应用锁避免设置,因为这些设置会影响所有共享同一个 DB2 系统的应用程序。

更多 DB2 调优最佳实践,见 参考资料

使用 JDBC 优化默认隔离级别

MDM 8.0 以及更高版本开箱即用,默认的 JDBC 隔离级别为 TRANSACTION_REPEATABLE_READ,或者使用 DB2 术语就是:读稳定性(read stability,RS)。这个隔离级别从功能角度来说很好,在目前普遍使用的数据库中锁争用(lock contention)可通过使用 TRANSACTION_READ_COMMITTED 隔离级别来减少,这被称之为游标稳定性(cursor stability,CS)。如果您准备迁移到 MDM,这一点尤为重要,因为这一步骤之前并没有要求。MDM 默认的优化隔离级别是 CS。将 MDM 中的默认隔离级别改为更乐观的 CS 的一个简单高效的方法是在 WebSphere Application Server 的 jdbc/DWLCustomer 数据源中添加一个自定义指令。在 WebSphere Application Server administrative 控制台完成以下步骤。

  1. 单击 Resources > JDBC provider
  2. 单击 Configured_JDBC_Provider > DataSource
  3. 单击您想要定制默认隔离级别的数据源名(DWLCustomer)。
  4. 在 Additional 属性下,单击 Custom properties > New
  5. 在 Name 字段,指定 webSphereDefaultIsolationLevel, Value 字段值设置为 2。默认值为 4。在表 1 中查看隔离级别
  6. 单击 OK,并保存配置。
  7. 在所有节点上同步您的更改。
  8. 停止然后重启应用程序服务器。
表 1. 隔离级别
可能值JDBC 隔离级别DB2 隔离级别
8TRANSACTION_SERIALIZABLE可重复读(RR)
4TRANSACTION_REPEATABLE_READ 读稳定性(RS)
2TRANSACTION_READ_COMMITTED 游标稳定性(CS)
1TRANSACTION_READ_UNCOMMITTED 未提交读(UR)

探究推荐的监控工具

MDM Server 支持多个操作系统平台、数据库和应用程序服务器。本节介绍在这些平台的子集之上运行的性能监控工具。有效的使用这些工具将帮助您减少性能问题,并且也能帮您查明根本原因。

UNIX CPU 性能监控工具

清单 12 和 13 通过不同的 UNIX 系统工具介绍了 CPU 的使用情况

清单 12. AIX CPU 使用情况
# sar -u 5 100
AIX othello 1 5 000C30AD4C00 06/17/05
12:38:09 	%usr	%sys	%wio	%idle
12:38:24 	12 	1 	1 	85
12:38:39 	26 	2 	0 	72
12:38:54 	9 	2 	1 	89
清单 13. Solaris CPU 使用情况
# sar 5 100

SunOS cage 5.9 Generic_118558-05 sun4u    07/12/2005

15:31:07    %usr    %sys    %wio   %idle
15:31:12       0       0       0     100
15:31:17       1       0       0      99
15:31:22       0       0       0     100
15:31:27       0       0       0     100

mpstat 命令是 Solaris 上另一个监控 CPU 使用情况的工具。mpstat 命令报告每个 CPU 的使用情况,也报告延伸的统计信息,包括上下文切换、中断等等。mpstat 命令如清单 14 所示。

清单 14. mpstat 命令
mpstat 5 5   will take 5 samples every 5 seconds.
mpstat 5 100
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  2   14   0   26     5    1   60    2    3    9    0   170    1   1   0  99
  3   15   0   22    28   24   62    1    2   10    0   142    1   1   0  99
 34   19   0   24   193   14   65    1    2   11    0   153    1   1   0  99
 35   17   0   26     5    1   67    2    3   11    0   152    1   1   0  99
 66   17   0   25    89    1   69    2    2   10    0   154    1   1   0  99
 67   15   0   23     5    1   68    2    2   10    0   149    1   1   0  99
 98   14   0   23     5    1   66    2    2   10    0   148    1   1   0  99
 99   14   0   23     5    1  101    2    2   10    0   149    1   0   0  99
130   14   0   26     5    1   66    2    2   11    0   137    1   0   0  99
131   14   0   22     5    1   67    2    2   11    0   140    1   0   0  99
162   15   0   22     5    1   67    2    2   10    0   144    1   0   0  99

UNIX 输入/输出性能监控工具

清单 15 和 16 是 AIX 和 Solaris 上 iostat 命令的输出样例。此报告对于每个操作系统都是不同的。在 AIX 上,iostat 命令使用 _a 选项给出每一个适配器的输入/输出统计数据,这是非常有用的。

清单 15. AIX iostat 输出
 AIX 
#  iostat -a

System configuration: lcpu=4 disk=12

tty:      tin         tout   avg-cpu:  % user    % sys     % idle    % iowait
          0.0          0.0               0.2      0.5       99.2       0.1     

Adapter:                   Kbps      tps    Kb_read   Kb_wrtn
scsi0                      5.2       1.2     196495   2154064

Paths/Disk:       % tm_act     Kbps      tps    Kb_read   Kb_wrtn
hdisk1_Path0           0.0       0.0       0.0          0         0
hdisk2_Path0           0.0       0.0       0.0       7397         4
hdisk3_Path0           0.0       0.0       0.0       2199        28
hdisk0_Path0           0.7       5.2       1.2     186899   2154032

Adapter:                   Kbps      tps    Kb_read   Kb_wrtn
fcs0                      11.8       1.3     110301   5166084

Paths/Disk:       % tm_act     Kbps      tps    Kb_read   Kb_wrtn
vpath1_hdisk17         0.0       0.7       0.2      22729    282512
vpath1_hdisk13         0.0       0.7       0.2      17239    281396
vpath0_hdisk16         0.0       2.3       0.2       7217   1006120
vpath0_hdisk12         0.0       2.3       0.2       8758   1010056
vpath3_hdisk19         0.0       2.3       0.2      22024   1006064
vpath2_hdisk14         0.0       0.6       0.2       8980    281792
vpath3_hdisk15         0.0       2.3       0.2      14352   1016480
vpath2_hdisk18         0.0       0.6       0.2       9002    281664

Solaris iostat 命令有很多选项可用于帮助监控输入/输出设备。清单 16 展示了 -x 选项,提供扩展的统计信息,同时还有很多参数可供选择。

清单 16. Solaris iostat 输出
Solaris
# iostat -x

                  extended device statistics                   
device       r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b 
sd15         0.0    0.0    0.0    0.0  0.0  0.0    2.4   0   0 
sd16         0.0    0.0    0.0    0.0  0.0  0.0    2.4   0   0 
sd17         3.7    0.6    9.2    5.1  0.0  0.0    1.3   0   0 
sd45         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0 
sd46         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0 
sd47         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0 
sd75         0.0    0.0    0.0    0.0  0.0  0.0    1.4   0   0 
sd76         0.0    0.0    0.0    0.0  0.0  0.0    1.6   0   0 
sd105        0.0    0.0    0.0    0.0  0.0  0.0    1.3   0   0 
sd106        0.0    0.0    0.0    0.0  0.0  0.0    1.3   0   0 
sd107        0.0    0.0    0.0    0.0  0.0  0.0    1.3   0   0 
sd136        0.0    3.1    0.0   12.6  0.0  0.0    0.6   0   0 
sd137        0.0    0.0    0.0    0.0  0.0  0.0    0.3   0   0 
sd139        0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0 
sd140        0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0 
sd2315       0.0    0.0    0.0    0.0  0.0  0.0    0.4   0   0 
sd2316       0.0    0.0    2.9    0.0  0.0  0.0   13.8   0   0 
sd2317       0.3    3.7    2.1   26.5  0.0  0.0    1.4   0   0 
sd2442       0.0    0.0    0.0    0.0  0.0  0.0    0.2   0   0 
sd2443       0.0    0.0    0.0    0.0  0.0  0.0    0.3   0   0

UNIX 网络性能监控工具

清单 17 和 18 是 AIX 和 Solaris 上 netstatare命令的输出样例。

清单 17. AIX netstat 输出
AIX (snapshot every 5 seconds on the en0 adapter)
# netstat -I en0 5
input (en0) output input (Total) output
packets errs packets errs colls packets errs packets errs colls
260984 0 128140 0 0 514023 0 405638 0 0
342 0 331 0 0 342 0 331 0 0
837 0 828 0 0 837 0 828 0 0
671 0 670 0 0 673 0 672 0 0
清单 18. Solaris netstat 输出
Solaris (snapshot every 5 seconds on the ce8 adapter)
# netstat -I ce8 5
    input   ce8       output           input  (Total)    output
packets errs  packets errs  colls  packets errs  packets errs  colls 
39248977 0     39931746 0     0      39739399 0     40422168 0     0     
7       0     0       0     0      7       0     0       0     0     
6       0     0       0     0      6       0     0       0     0     
7       0     31      0     0      7       0     31      0     0     
8       0     0       0     0      8       0     0       0     0     
9       0     0       0     0      9       0     0       0     0     
5       0     0       0     0      5       0     0       0     0

UNIX 内存使用监控工具

清单 19 和 20 是 AIX 和 Solaris 上 vmstat 命令的输出样例

清单 19. AIX 内存使用情况
(snapshot every 5 seconds)
#  vmstat 5
System Configuration: lcpu=4 mem=14336MB
kthr     memory             page              faults        cpu     
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa 
 1  1 772314 2075422   0   0   0   0    0   0 575  810 242  0  1 99  0
 0  0 772156 2075580   0   0   0   0    0   0 579  579 214  0  1 99  0
 0  0 772414 2075321   0   0   0   0    0   0 571 1034 198  0  0 99  0
 0  0 772006 2075730   0   0   0   0    0   0 560 1060 163  0  0 99  0
 0  0 772006 2075730   0   0   0   0    0   0 562  521 165  0  1 99  0
清单 20. Solaris 内存使用情况
(snapshot every 5 seconds)
#  vmstat 5
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s1 s1 s1 s4   in   sy   cs us sy id
 0 0 0 39372952 28946544 127 272 9 2 2 0 0  0  0  4  0  803 2498 1152  1  1 99
 0 0 0 43181064 29508744 0 1 0  0  0  0  0  0  0  0  0  384  559  328  0  0 100
 0 0 0 43179664 29508112 232 536 16 0 0 0 0 0  0  8  0  616 2286  361  1  1 99
 0 0 0 43181064 29508744 0 0 0  0  0  0  0  0  0  0  0  379  774  326  0  0 100
 0 0 0 43179648 29508096 232 536 16 0 0 0 0 0  0  8  0  618 2304  366  1  1 99

使用 nmon 自动监控 UNIX 上的资源

在性能测试过程中或生产环境下自动收集资源利用信息非常有用。IBM 提供的免费工具 nmon 可以满足您的需求。nmon 工具在 AIX 和 Linux 平台上运行。这个工具专为收集和分析 AIX 性能数据而设计(使用 nmon 分析器 Excel 电子表格),其中包括:

  • CPU 利用率
  • 内存使用
  • 内核统计
  • 运行队列信息
  • 磁盘输入/输出率
  • 传输
  • 读/写比率
  • 文件系统的可用空间
  • 磁盘适配器
  • 网络输入/输出率
  • 交换空间
  • 分页速率
  • CPU 和 AIX 规范
  • 顶级处理器
  • IBM HTTP web 缓存
  • 用户定义的磁盘组
  • 机器详细信息和资源
  • 异步输入/输出
  • 工作负载管理器
  • ESS 磁盘
  • NFS
  • 动态 LPAR 更改

要启动 nmon 进程并将日志条目记录到一个文件中,输入 nmon -f -s 15 -c 120。该命令每隔 15 秒记录一次性能统计数据,间隔 120 次,共计 (15*120)/60 = 30 分。该日志位于运行目录下的 <hostname>_date_time.nmon 文件中。如果想要注销系统,可能需要使用 nohup 运行该日志。

这个工具运行结束后,运行排序命令 sort -A mymachine_311201_1030.nmon > res_usage_test1.csv 来排序和生成逗号分隔的文件,供 Excel nmon 分析器使用。打开 Excel 电子表格 nmon analyzer v301.xls,然后加载 .csv 文件,如图 1 所示。

图 1. Excel nmon 处理工具
屏幕图:含有样例数据的 nmon Analyzer Excel 电子表
屏幕图:含有样例数据的 nmon Analyzer Excel 电子表

分析之后,将输出文件保存成一个常规 Excel 文件。在输出文件中,资源利用率在每个选项卡下列出。第一张工作表是汇总表。图 2 是生成的输出的一个示例。

图 2. 已处理的 nmon 输出的样例
屏幕图:nmon Analyzer 输出的图表和条形图,显示资源性能,包括最优性能
屏幕图:nmon Analyzer 输出的图表和条形图,显示资源性能,包括最优性能

(查看图 2 的 大图。)

WebSphere JVM 监控工具:IBM Pattern Modeling and Analysis Tool for Java Garbage Collector

IBM Pattern Modeling and Analysis Tool for Java Garbage Collector 是一个工具,用于解析详细的 GC 跟踪、分析 Java 堆使用情况,并基于 Java 堆使用的模式建模推荐关键配置。见 参考资料 获取详细信息。图 3 是正在运行的工具的屏幕截图。

图 3. IBM Java Pattern and Analysis Tool for GC
屏幕图:显示分析和推荐报告,包括 native_stderr.log 图表视图
屏幕图:显示分析和推荐报告,包括 native_stderr.log 图表视图

WebSphere JVM HeapAnalyzer

HeapAnalyzer 是一个图形化工具,用于发现可能的 Java 堆泄漏。参阅 参考资料 获取详情。图 4 是该工具的屏幕截图。

图 4. IBM HeapAnalyzer
屏幕图:对象视图、差距分析表和 heapdump2.ha 树视图
屏幕图:对象视图、差距分析表和 heapdump2.ha 树视图

MDM Server 内置跟踪功能

MDM Server 支持不同级别的日志记录。您也可以为某个特定组件开启跟踪(智能功能)。要解决性能故障,PerformanceTracking 参数是一个最常用的跟踪工具。使用 PerformanceTracking 参数完成以下步骤。

  1. 从 configelement 表启用性能监控器,如清单 21 所示。
清单 21. 启用性能监控器
db2 -v update configelement set value='-1' where name in \
('/IBM/DWLCommonServices/PerformanceTracking/level')
db2 -v update configelement set value='true' where name like \
'/IBM/DWLCommonServices/PerformanceTracking/%enabled'
  1. 为 performancemonitor.log 在 properties.jar 中配置 log4J,如清单 22 所示。
清单 22. 配置 log4J
log4j.appender.performanceLog=org.apache.log4j.RollingFileAppender
log4j.appender.performanceLog.Encoding=UTF-8
log4j.appender.performanceLog.Threshold=ALL
log4j.appender.performanceLog.layout.ConversionPattern=%d : %m%n
log4j.appender.performanceLog.layout=org.apache.log4j.PatternLayout
log4j.appender.performanceLog.File=../../../logs/MDM80IT6/performancemonitor.log
log4j.logger.com.dwl.base.performance.internal.PerformanceMonitorLog=INFO,\
performanceLog
log4j.appender.performanceLog.MaxBackupIndex=2
log4j.appender.performanceLog.MaxFileSize=100MB
  1. 重启 WebSphere Application Server。
  2. 运行预热事务。
  3. 清理性能监控文件,输入如下代码:bash-3.00# cat /dev/null > performancemonitor.log
  4. 多次运行正在调试的事务(通常 100 次)。
  5. 停止测试。
  6. 用清单 23 中的代码验证文件启动。
清单 23. 文件成功消息
"21194878586562 processTx : processTx(String,Object) @ DWLRequestHandler :  :\
1961194878586562 : 24785000 :  : SUCCESS"

结束语

IBM InfoSphere Master Data Management Server 通过支持企业管理和维护一个完整且精确的主数据视图,来帮助它们增强对整体业务信息的控制。InfoSphere MDM Server 通过集中多个数据域和提供一整套预先构建的业务服务(提供一整套主数据管理功能)使企业可以从主数据获取最大价值。高度灵活的特性使 MDM Server 可以提供范围广泛的定制功能,支持企业开发他们自己的服务来满足其客户需求。由于其高度可定制的特性,您需要掌握每一层对整体性能的影响。本系列文章包括理论和实践信息,可以帮助您理解 InfoSphere MDM Server 以及监控和调优方法,来满足您的性能目标和业务需求。同时提供有价值的参考信息,在开发、分析和解决 MDM 系统性能问题时可以参考。

致谢

我们要感谢 David Borean、Lena Woolf、Bill Xu、Steve Reese 和 Berni Schiefer 为本系列文章提供的内容和建议。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, WebSphere
ArticleID=680336
ArticleTitle=监控和调优 InfoSphere Master Data Management Server,第 2 部分: 监控 DB2 层并了解不同的监控工具
publish-date=06132011