简介
通过快照提供性能指标已有很长一段时间。快照提供了大量信息,但这些信息不适合用于很好地收集历史数据。如果想要收集历史数据,则需要扔掉许多无用的数据,因为快照捕获的数据比您所需的数据多。此外,需要大量脚本工作才能从快照输出中提取数据和存储数据。
从 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 命令
另一种选择是使用随 DB2 V9.7 提供的表函数。SQL 也可以查询这些表函数,但需要输入上述视图不需要的参数。根据您所关注的重点,可以使用不同的函数。主要类别博阿凯:
1.面向多种数据库对象和 DB2 组件的监视函数。它们的名称都以 mon_get
开头。
2.面向工作负载管理 (WLM) 的表函数。这些表函数从 WLM 的角度为您提供
DB2 执行情况的洞察。可用的函数都以 wlm_get 开头。
3.以 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. 查询可用的表函数
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 的原因,这表示所有成员。
在真实的情况下,需要限制要监控的表的数量,因为您并不是对一切都感兴趣,并且您会收集到比自己所需数据多得多的数据。
确定数据收集的时间间隔
数据收集的时间间隔很重要,值得花一些时间研究。这是确定想要看到的特定项目或效果的一个要素。
您需要知道数据收集的目的。如果要进行故障排除或试图确定问题原因所在,则需要为数据提供一个较小的时间间隔。如果正在收集长期趋势数据,那么您并不需要在短时间内捕获大量的详细信息。
要牢记的另一个要素是为性能数据库保留的空间量。如果以较短的时间间隔收集数据,可以预期在较短的时间内会产生一些占用磁盘空间的大表。
建立性能数据库
在建立性能数据库时有若干个选项。要回答的最重要的问题与性能数据的位置有关。
您可以选择将性能数据库托管在从中收集数据的系统上。不过,更好的选择是提供一个单独的数据库(最好在另一个系统上)来存储数据。后一种选择有很多好处。
1.通过将数据插入表中产生负载或 I/O,这样做不会干扰正在监控的工作负载。
2.可能发生的数据挖掘活动不会干扰源系统。
3.因为您是主要用户和惟一的用户,所以您可以在性能数据库上随意修改参数或设置。
建立数据库的第一步是在所需的实例中创建性能数据库,并连接它。您可以使用数据库
PERFDB 的默认设置,如清单 4 所示。
清单 4. 创建并连接到数据库
create db perfdb
connect to perfdb |
图 3 显示了创建数据库语句和随后的连接语句的示例。
图 3. 创建并连接到数据库
下一步是创建包含所捕获数据的表 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. 创建用于存储数据的表
建立收集和传输机制以捕获所需的数据
如果您的目标表与源系统位于同一个数据库中,那么您可以使用 INSERT
语句将数据插入表中。如果您的目标表在单独的数据库中,那么您可以使用加载实用程序,将数据从源系统交叉加载到目标系统中。
为了创建历史数据,数据中需要包含一个时间组件,可以用它来??随着时间的推移跟踪数据,并总结或汇总所需时间周期的数据。如果使用管理视图,当前时间戳已经包含在视图定义中。如果使用表函数,则必须在查询中手动包括
current_timestamp 特殊寄存器。
在创建了用于包含性能数据的一个名为 PERFDB 的单独数据库之后,必须构造一个 load 语句,在源系统上实际发出查询,并将数据发送回
LOAD 实用程序。这一活动可以被分解为四个步骤:
连接到目标数据库。
使用 select 语句声明游标。
调用加载实用程序,将数据实际加载到目标表中。
重置连接。
清单 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. 运行已创建的加载脚本
输出显示了已执行的加载实用程序语句,其中包括有关已经加载多少行的一些统计信息(参见
大图)。
图 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 性能数据。然后,将检索到的数据加载到单独的数据库中,这些数据可用于分析,或者作为其他性能管理或报告工具的源。
|