设为首页 加入收藏

TOP

db2索引优化 (三)
2014-11-24 01:44:58 来源: 作者: 【 】 浏览:6
Tags:db2 索引 优化
录以确定索引名
db2 "select indschema, indname
from syscat.indexes
where tabschema = 'fechner' and tabname = 'department' and iid = 3"

清单 13 显示了以上的 select 语句的输出。

清单 13. 索引名查询的结果集
indschema indname
------------------------------ ------------------------------
fechner xdept3

1 record(s) selected.

除了 scans 列之外,db2pd 实用程序的 tcb index stats 部分还有一个 ixonlyscns 列,它显示仅扫描索引的数量。仅扫描索引是未包含表访问的索引访问,因为索引本身包含了所有被请求的数据。因此,如果 ixonlyscns 计数器不为 0,您就必须将 scans 列和 ixonlyscns 列的计数合并起来,以得到索引被访问的总次数。

在讨论 design advisor 时已经提到,在解释索引使用信息时必须格外小心。使用 db2pd 方法时也要持有这种态度。某个索引可能要在特定时间点才被使用,但这不一定就意味着该索引永远未被使用。因此,在决定是否删除当前未使用的索引时,一定要仔细考虑。如果您决定删除索引,那么首先要保存它的 create index 语句,以便在需要时轻松地重新创建它。


回页首

db2 workload manager (wlm)

db2 design advisor 和 db2pd 实用程序都是在 db2 version 8 中引入的,并且在 db2 version 9 中仍可使用。从 db2 v9.5 开始,您还可以使用 db2 workload manager (wlm) 来收集索引使用信息。一般而言,wlm 是一个收费的 db2 特性,必须单独购买使用许可证。不过,作为 wlm 的一部分的扩展数据库监控选项可以免费使用,不需要单独的使用许可证。这个小节不介绍 db2 wlm,而是通过一个逐步的说明,教您使用特定于 wlm 的事件监控器和两个 perl 脚本(db2 安装的一部分)收集和计算索引使用信息。

像 design advisor 一样,wlm 要求您在使用它之前创建 explain 表(参见 清单 2 了解关于运行 explain.dll 脚本创建 explain 表的细节)。同样,您必须首先运行位于 sqllib/misc 子目录中的 wlmevmon.ddl 脚本。该脚本创建并启用特定于 wlm 的事件监控器:db2activities、db2statistics 和 db2thresholdviolations。这些事件监控器将收集到的数据写到表中。默认情况下,这些表在表空间 userspace1 中创建。如果您想让表位于另一个表空间中,可以在运行之前对脚本进行相应的修改。清单 14 显示了运行 wlmevmon.ddl 脚本的命令。

清单 14. 创建特定于 wlm 的事件监控器
db2 -tf "c:\program files\ibm\sqllib\misc\wlmevmon.ddl"

默认情况下,事件监控器创建之后带有 autostart 选项,这表示在数据库下一次被激活时将自动运行事件监控器。在使用首次创建的事件监控器之前,您必须首先禁用数据库然后再激活它,或手动运行事件监控器,如清单 15 所示。

清单 15. 启动特定于 wlm 的事件监控器
db2 "set event monitor db2activities state 1"
db2 "set event monitor db2statistics state 1"
db2 "set event monitor db2thresholdviolations state 1"

要理解下一个命令,您需要基本了解服务类 的 wlm 概念。wlm 允许您将具有不同响应时间需求的工作负载分配给不同的服务类和服务子类。从 db2 version 9.5 开始,服务类的使用紧密地集成到 db2 引擎中。即使 wlm 没有显式地使用服务类(即数据库管理员没有定义任何服务类),所有用户事务都是在预定义的服务类上下文中执行的。预定义的服务类为 sysdefaultuserclass,它的对应子类为 sysdefaultsubclass。特定于 wlm 的事件监控器通常针对特定的服务类或服务子类进行激活。这意味着它们仅为这些服务类或服务子类收集数据。

在这个样例场景中,您将为服务子类 sysdefaultsubclass 激活 db2actvities 事件监控器。这样,您将为所有用户事务收集监控器信息,因为没有定义特定于应用程序的服务类。由于不存在特定于应用程序的服务类,所有用户事务都在默认服务类及其子类的上下文中执行。清单 16 显示了为默认的服务类及其子类激活事件监控器的命令。

清单 16. 为默认的服务类及其子类激活事件监控器
db2 "alter service class sysdefaultsubclass under sysdefaultuserclass
collect activity data on all database partitions with details"

监控器数据收集应该包含一个时间框架,您期望在这段时间内发生普通数据库活动(例如,每个工作日的 9 a.m. 到 5 p.m.)。在监控器数据收集完成之后,需要禁用事件监控器,如清单 17 所示。

清单 17. 禁用针对默认服务类及其子类的事件监控器
db2 "alter service class sysdefaultsubclass under sysdefaultuserclass
collect activity data none"

运行 perl 样例程序
在运行 perl 样例程序之前,必须为 perl dbi 安装 perl 解释器和 dbd::db2 驱动程序。关于如何获得最新的驱动程序的信息,请查看 db2 perl database interface for luw。

为了根据收集到的 wlm 事件监控器数据计算索引的使用,db2 提供了两个 perl 脚本,它们是 wlmhist.pl 和 wlmhistrep.pl。您可以在 db2 安装目录下的 samples\perl 子目录中找到它们。这两个脚本都要求使用数据库名、数据库用户名和密码作为输入参数。

首先运行 wlmhist.pl 脚本。它将读取从事件监控器表执行的 sql 语句,然后对每个语句运行 explain 实用程序以生成对应的访问计划。在读取 sql 语句之后,脚本将从 explain 表提取访问计划信息并将其写到名为 wlmhist 的表中(如果还没有 wlmhist 表,就创建它)。

接下来,运行 wlmhistrep.pl 脚本以计算储存在 wlmhist 表中的数据。该脚本创建一个包含关于表和索引使用的细节的报告。当运行 wlmhistrep.pl 时,除了数据库名、数据库用户名和密码之外,您还必须指定生成的报告文件的名称。

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇DB2中的sequence定义和使用 下一篇DB2 purescale vs Oracle RAC

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: