要资料 文章 文库 视频 Code iProcess 课程 认证 咨询 工具 讲座吧   专家招募  
会员   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
分享到
以简单的方式捕获和存储DB2性能数据
 

发布于2013-8-7

 

简介

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

从 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. 运行已创建的加载脚本

 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 性能数据。然后,将检索到的数据加载到单独的数据库中,这些数据可用于分析,或者作为其他性能管理或报告工具的源。

相关文章 相关文档 相关课程



我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优
 
分享到
 
 


MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...   
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号