以简单的方式捕获和存储 DB2 性能数据

充分利用具有 DB2 实用程序的监测框架

您有没有想过如何在不借助额外工具的情况下采用简单的方法收集 DB2 系统的性能数据?在本文中,将学习如何充分利用可从 V10.1 中获得的新的 DB2® for Linux®, UNIX®, and Windows® 监控框架(最初在 v9.7 中引入)。本文还将介绍,通过普通的 SQL 或使用 BI 工具,如何组合使用 DB2 实用程序来选择、捕获和存储可用于分析的数据。

Guido Verbraak, Software Group Lab Services Consultant, IBM

Guido Verbraak 的照片Guido Verbraak 自 2003 年以来一直致力于 DB2,是 Benelux 的一名软件部实验室服务顾问,Guido 帮助客户在他们的 DB2 安装中获得最大效益。Guido 的主要关注 DB2 on Linux, UNIX, and Windows,但他也非常了解 DB2 for z/OS。在日常工作​​中,Guido 与其 DB2 客户遭遇到了各种情况,涉及的领域包括高可用性、备份/恢复和性能等。在加入软件集团之前,他管理着一个托管在 DB2 for z/OS 之上的大型数据仓库环境,积累了搭建可扩展、高性能的数据仓库环境方面的专业知识。



2013 年 7 月 16 日

简介

通过快照提供性能指标已有很长一段时间。快照提供了大量信息,但这些信息不适合用于很好地收集历史数据。如果想要收集历史数据,则需要扔掉许多无用的数据,因为快照捕获的数据比您所需的数据多。此外,需要大量脚本工作才能从快照输出中提取数据和存储数据。

从 DB2 9.7 开始,引入了一个新的监控框架。这个新框架在数据库级别上工作,基于 SQL 的接口,允许您准确地从 DB2 检索到所需的数据。只需掌握一些 SQL 基本知识并了解开箱即用的 DB2 函数,就可以开始使用该框架。

下列步骤展示了如何成功构建一个性能数据库。本文档中的示例是使用 DB2 V10.1 for Linux, UNIX, and Windows 创建的。由于 DB2 9.7 中提供了监控框架,所以您也可以使用 DB2 的这个版本。在所有版本的 DB2 中,都提供了监控框架。


收集和存储性能数据

收集和存储性能数据:

  1. 确定想捕获什么数据,以及数据按照什么样的时间间隔进入性能数据库。
  2. 建立一个用于收集数据的数据库
  3. 建立一个收集性能数据的机制,并将它传输到数据库中。

确定想捕获什么数据和所用的时间间隔

使用新的监控框架,可以采用许多方法来收集 DB2 性能数据。其中一种方法就是使用位于架构 SYSIBMADM 中的视图。这些视图随时可与 SQL 配合使用,而且这些视图是结合了一个或多个表函数的结果而构造的。您可以在数据库上使用以下查询,并捕获数据,以确定哪些视图可用。

清单 1. List tables 命令
list tables for schema SYSIBMADM

图 1 显示了 list tables 命令的输出、表/视图的名称、架构名称、类型(T 表示表格,V 表示视图)和创建时间。

图 1. List tables 命令
屏幕截图显示了 list tables 命令的输出。它返回属于 SYSIBMADM 架构的所有表和视图的列表

另一种选择是使用随 DB2 V9.7 提供的表函数。SQL 也可以查询这些表函数,但需要输入上述视图不需要的参数。根据您所关注的重点,可以使用不同的函数。主要类别博阿凯:

  • 面向多种数据库对象和 DB2 组件的监视函数。它们的名称都以 mon_get 开头。
  • 面向工作负载管理 (WLM) 的表函数。这些表函数从 WLM 的角度为您提供 DB2 执行情况的洞察。可用的函数都以 wlm_get 开头。
  • admin_get 开头的函数提供了可在更类似于数据库管理的设置(例如,在监视表大小或内存消耗时)中使用的信息。

如需获得所有可用表函数和管理视图的完整列表,请参阅 DB2 Version 9.7 for Linux, UNIX, and Windows 信息中心(请参阅 参考资料)。

如需获得最常用的表函数,请使用如清单 2 所示的查询。

清单 2. 查询可用的表函数
select funcname from syscat.functions where funcname like 'MON_GET%' \n
or funcname like 'WLM_GET%' or funcname like 'ADMIN_GET%'

图 2 中的示例显示了可用的表函数。

图 2. 查询可用的表函数
屏幕截图显示了清单 2 的查询输出。该输出显示了目录中的函数的名称

DB2 Information Center 对哪些表函数返回哪些数据提供了一个很好的解释(请参阅 参考资料)。

在本例中,您可以监视在数据库中的所有表上的表扫描数量。您还可以使用 MON_GET_TABLE 表函数,因为 tablefunction 返回一个列,其中显示了数据库中每个表上的扫描数量。

如需清楚地了解某个工作日的扫描数量,可以使用如清单 3 所示的查询,按照 10 分钟的时间间隔收集所需的数据。

清单 3. 示例查询
SELECT
current_timestamp,
tabschema,
tabname,
table_scans
FROM TABLE(MON_GET_TABLE('','',-2)) AS t

如果查看表函数 MON_GET_TABLE,可以看到它有三个输入参数。第一个表示表架构,第二个表示表名称,第三个参数让您可以指定想从 DPF 数据库(数据库分区特性)的哪个成员收集数据。

在本例中,可以从所有数据库成员捕获所有架构中的所有表的全部表扫描。这就是为什么前两个参数是表示 NULL 的 '' 而最后一个参数是 -2 的原因,这表示所有成员。

在真实的情况下,需要限制要监控的表的数量,因为您并不是对一切都感兴趣,并且您会收集到比自己所需数据多得多的数据。


确定数据收集的时间间隔

数据收集的时间间隔很重要,值得花一些时间研究。这是确定想要看到的特定项目或效果的一个要素。

您需要知道数据收集的目的。如果要进行故障排除或试图确定问题原因所在,则需要为数据提供一个较小的时间间隔。如果正在收集长期趋势数据,那么您并不需要在短时间内捕获大量的详细信息。

要牢记的另一个要素是为性能数据库保留的空间量。如果以较短的时间间隔收集数据,可以预期在较短的时间内会产生一些占用磁盘空间的大表。


建立性能数据库

在建立性能数据库时有若干个选项。要回答的最重要的问题与性能数据的位置有关。

您可以选择将性能数据库托管在从中收集数据的系统上。不过,更好的选择是提供一个单独的数据库(最好在另一个系统上)来存储数据。后一种选择有很多好处。

  • 通过将数据插入表中产生负载或 I/O,这样做不会干扰正在监控的工作负载。
  • 可能发生的数据挖掘活动不会干扰源系统。
  • 因为您是主要用户和惟一的用户,所以您可以在性能数据库上随意修改参数或设置。

建立数据库的第一步是在所需的实例中创建性能数据库,并连接它。您可以使用数据库 PERFDB 的默认设置,如清单 4 所示。

清单 4. 创建并连接到数据库
create db perfdb

connect to perfdb

图 3 显示了创建数据库语句和随后的连接语句的示例。

图 3. 创建并连接到数据库
屏幕截图显示了 create database 命令和连接到 PERFDB 数据库的初始连接

下一步是创建包含所捕获数据的表 TABLESCANS。在使用相同数据类型时,DB2 会根据查询为您创建了一些表。在创建表之后,可以使用 describe table 命令来验证这些表的定义。

清单 5. 通过查询来创建用于存储数据的表
create table tablescans as
describe table tablescans
(SELECT
current_timestamp as current_timestamp,
tabschema,
tabname,
table_scans
FROM TABLE(MON_GET_TABLE('','',-2)) AS t) with no data

图 4 (参见 大图)显示了创建表语句的示例。

图 4. 创建用于存储数据的表
屏幕截图显示了清单 5 中的 create table 语句和随后的 describe table 命令,以便说明如何创建表

建立收集和传输机制以捕获所需的数据

如果您的目标表与源系统位于同一个数据库中,那么您可以使用 INSERT 语句将数据插入表中。如果您的目标表在单独的数据库中,那么您可以使用加载实用程序,将数据从源系统交叉加载到目标系统中。

为了创建历史数据,数据中需要包含一个时间组件,可以用它来​​随着时间的推移跟踪数据,并总结或汇总所需时间周期的数据。如果使用管理视图,当前时间戳已经包含在视图定义中。如果使用表函数,则必须在查询中手动包括 current_timestamp 特殊寄存器。

在创建了用于包含性能数据的一个名为 PERFDB 的单独数据库之后,必须构造一个 load 语句,在源系统上实际发出查询,并将数据发送回 LOAD 实用程序。这一活动可以被分解为四个步骤:

  1. 连接到目标数据库。
  2. 使用 select 语句声明游标。
  3. 调用加载实用程序,将数据实际加载到目标表中。
  4. 重置连接。

清单 6 中的查询显示了如何创建加载脚本来声明游标,选择适当的数据,然后将数据加载到所需的表中

清单 6. 根据查询来创建声明游标的加载脚本
CONNECT to PERFDB;
                
DECLARE C1 CURSOR database sample user <userid> using <password> FOR
SELECT
current_timestamp,
tabschema,
tabname,
table_scans
FROM TABLE(MON_GET_TABLE('','',-2)) AS t;
                
LOAD FROM "C1" of cursor
MESSAGES "C:\temp\msg.txt" 
TEMPFILES PATH "C:\temp" 
INSERT INTO TABLESCANS
(current_timestamp,
tabschema,
tabname,
table_scans) 
NONRECOVERABLE 
INDEXING MODE AUTOSELECT;
                
CONNECT RESET;

四个步骤需要按顺序执行,所以应该将它们一起放在某个文件中,并使用调度实用程序让 DB2 定期处理该文件。

在本例中,创建了一个名为 loadcursor.sql 的文件,它包含来自四个步骤的语句。DB2 命令行处理器一直在 DOS 提示符下执行语句。

清单 7. 运行已创建的加载脚本
 db2 -tvf loadcursor.sql

输出显示了已执行的加载实用程序语句,其中包括有关已经加载多少行的一些统计信息(参见 大图)。

图 5. 运行已创建的 loadscript
屏幕截图显示了如何执行加载实用程序将数据加载到表中,还显示了一些统计数据,以及加载成功与否

前面的示例是在 Windows 平台上开发的,但您也可以在 Linux 和 UNIX 平台上轻松地使用它们。

有几件事情要记住。

  • 监测框架中的大部分测量是累积的。如果想知道测量的两个时刻之间的差值,则需要将测量值相减。
  • 在实例级上启动的 “旧” 监测器对数据库级上的 “新” 框架的数据收集没有影响。
  • 在本文中,只演示了一个简单的示例。没有什么可以阻碍您将多个表函数结合到一个查询中并提取数据。

使用中的注意事项

如果您计划收集大量数据,打算在 DB2 系统上执行性能管理,那么使用 Optim Performance Manager (OPM) 可能会更经济高效,且更容易使用。OPM 包含在 DB2 Advanced Enterprise Server Edition (AESE) 中,也可以将它作为单独的产品出售。OPM 是全面的、主动的解决方案,适用于 DB2 和 InfoSphere Warehouse for Linux, UNIX, and Windows 的实时监控和性能仓库。有关的更多信息请参阅 参考资料

您可以对其他产品(比如 Optim Query Workload Tuner、Optim Query Tuner 或 Cognos BI)使用捕获到的数据,以调优查询,调优整个工作负载,并创建所捕获数据的报告。例如,您可以捕获数据,显示在特定时间段内您环境中的排名前 10 位的已执行查询,​​并将这些数据作为 Optim Query Workload Tuner 中的调优活动的输入。


结束语

在本文中,您构造了一个查询,使用表函数检索 DB2 性能数据。然后,将检索到的数据加载到单独的数据库中,这些数据可用于分析,或者作为其他性能管理或报告工具的源。

参考资料

学习

获得产品和技术

  • 下载免费试用版本的 DB2 for Linux, UNIX, and Windows
  • 现在您可以免费使用 DB2。下载 DB2 Express-C,这是面向社区的免费版本的 DB2 Express Edition,它提供了与 DB2 Express Edition 相同的核心数据特性,并为构建和部署应用程序提供了坚实的基础。

讨论

条评论

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
ArticleID=937419
ArticleTitle=以简单的方式捕获和存储 DB2 性能数据
publish-date=07162013