监控 DB2 活动之捕获快照数据


  数据库系统监控器

  数据库监控是一项重要的活动,若将其作为日常活动来执行,将连续提供数据库系统健康状况的反馈信息。正由于数据库监控是数据库管理的完整组成部分,DB2 9 提供了一种称为数据库系统监控器的监控实用工具。尽管其名称 “数据库系统监控器” 似乎表示仅提供了一种监控工具,但实际上,数据库系统监控器由两种不同的工具组成,可用于捕获和返回系统监控信息:一个快照监控器 和一个或多个事件监控器。快照监控器允许您捕获特定时间点的数据库状态图,而事件监控器在特定数据库事件发生时捕获并记录数据。这两种工具所收集的数据均存储在称为监控元素(或数据元素)的实体中。所使用的各监控元素通过惟一的名称标识,且均设计用于容纳特定类型的信息。以下类型的元素用于存储监控数据:

  •   计数器(Counter)。计数器保存活动或事件已发生的次数。在监控器的整个生命周期中,计数器值逐渐增加;通常,计数器监控元素是可重置的。为某个数据库执行的 SQL 语句总数就是计数器元素的一个示例。
  •   计量器(Gauge)。计量器保存在特定时间点发生的活动或事件的次数。与计数器值不同,计量器值可增加,也可减少,计量器在给定时间点的值通常取决于数据库活动的级别。当前连接到某个数据库的应用程序数量就是计量器元素的一个示例。
  •   水位标(Watermark)。水位标表示自监控开始以来观测到的最高(最大)或最低(最小)值。更新操作所影响的最大行数就是水位标元素的一个示例。
  •   信息(Information)。顾名思义,信息元素提供所执行的全部监控活动的引用类型细节。信息元素的示例包括缓冲池名称、数据库名称和别名、路径详细信息等。
  •   时间戳(Timestamp)。时间戳表示活动或事件发生的日期和时间。时间戳值以 1970 年 1 月 1 日后流逝的秒和微秒数形式提供。与数据库的第一个连接的建立日期和时间就是一个时间戳元素的示例。
  •   时间(Time)。时间元素保存执行一个活动或事件所花费的时间。时间值以自活动或事件开始以后流逝的秒和微秒数形式提供,有些时间元素是可重置的。执行一次排序操作所花费的时间就是一个时间元素的示例。

  数据库系统监控器可利用上述元素的任意组合来捕获监控数据,一旦收集完成,即可使用一些方法为快照监控器和事件监控器展示所用各元素中存储的数据,您可以选择将收集到的所有数据存储在文件或数据库表中,在屏幕上查看,或使用定制应用程序进行处理。(数据库系统监控器使用自我描述的数据流将监控数据返回给客户机应用程序。使用快照监控应用程序,您可调用恰当的快照 API,捕获快照,然后处理所返回的数据流;使用事件监控应用程序,您可准备好通过文件或指定管道接收所生成的数据,激活适当的事件监控器,并在接收到数据流时对其加以处理。)

  快照监控器

  快照监控器设计用于收集 DB2 UDB 实例及其控制的数据库在特定时间点(换言之,就是在捕获到快照时)的相关状态信息。快照对于确定一个数据库系统的状态非常有用,若按固定时间间隔捕获,则可提供能用于观测发展趋势并识别潜在问题领域的宝贵信息。要捕获快照,可在 DB2 Command Line Processor(CLP)中执行 GET SNAPSHOT 命令,方法是在查询中使用恰当的快照表函数或在 C、C++ 应用程序中使用快照监控器 API。此外,还可根据具体需求打造快照,以便返回特定类型的监控数据值(例如,可将一个快照配置为仅返回与缓冲池相关的信息)。

  快照监控器开关

  通常情况下,收集系统监控数据需要额外的处理开销。例如,为了计算 SQL 语句的执行时间,DB2 Database Manager 必须调用操作系统,获取 SQL 语句执行之前和之后的时间戳。此类系统调用的成本高昂。使用系统监控器的另外一个副作用就是所消耗的内存量大大增加 —— DB2 Database Manager 要使用内存来存储为系统监控器所追踪的各监控元素收集的数据。

  为帮助最小化与收集系统监控信息相关的开销,可使用一组称为快照监控器开关 的开关,控制在捕获快照时收集哪些信息,通过这些快照监控器开关的设置方式来确定所收集的信息类型与数量。各快照监控器开关都有两种设置:ON 和 OFF。将一个快照监控器开关设置为 OFF 时,受此开关控制的元素的监控信息不予收集。若开关设置为 ON,则情况恰好相反。(切记,有大量监控信息不受开关控制,无论快照监控器开关如何设置,这些信息总是会被收集。)表 1 列出了可用的快照监控器开关,还给出了各开关设置为 ON 时所收集的信息类型的描述。

表 1. 快照监控器开关

监控器组 监控器开关 DBM 配置参数 所提供的信息
缓冲池 BUFFERPOOL dft_mon_bufferpool 缓冲池活动的数量(换言之,即所执行的读取和写入操作的数量,以及各次读/写操作所用时间)。
LOCK dft_mon_lock 具有的锁数量,以及遇到的死锁循环数量。
排序 SORT dft_mon_sort 所执行的排序操作数量、使用的堆数量、遇到的溢出数、排序性能。
SQL 语句 STATEMENT dft_mon_stmt SQL 语句处理开始时间、SQL 语句处理结束时间、SQL 语句标识。
TABLE dft_mon_table 所执行的表活动数量,例如读取的行数、写入的行数等。
时间戳 TIMESTAMP dft_mon_timestamp 时间和时间戳信息。
事务 UOW dft_mon_uow 事务开始时间、事务结束时间以及事务的完成状态。

  默认情况下,表 1 中的所有开关均设置为 OFF,TIMESTAMP 开关是个例外,其默认设置为 ON,并在一个实例初次启动时初始化。

  查看当前快照监控器开关设置

  前面已经提到,在捕获快照时,所收集的信息类型和数量在某种程度上是可以控制的 —— 通过设置快照监控器开关实现。在您捕获快照之前,应了解哪些快照监控器开关已打开,而哪些快照监控器开关依然是关闭的,这一点非常重要。如何才能了解各可用快照监控器开关的当前设置呢?最简单的方法就是在 DB2 Command Line Processor(CLP)中执行 GET MONITOR SWITCHES 命令。此命令的基本语法是:

  GET MONITOR SWITCHES

  其中的 PartitonNum 标识要为其获取并显示可用快照监控器开关状态的数据库分区(在多分区数据库环境中)。

  注意:尖括号(< >)中的参数是可选的;方括号([ ])中的参数或选项是必需的;而逗号后接省略号(...)则表示之前的参数可重复使用多次。

  如果您希望为单分区数据库获取并显示快照监控器开关状态,可执行 GET MONITOR SWITCHES 命令,方式如下:

  GET MONITOR SWITCHES

  在 Command Line Processor 中执行此命令时,您应看到形式如下的输出结果。

  GET MONITOR SWITCHES 命令的输出

  Monitor Recording Switches

  Switch list for db partition number 0

  Buffer Pool Activity Information (BUFFERPOOL) = OFF

  Lock Information (LOCK) = OFF

  Sorting Information (SORT) = OFF

  SQL Statement Information (STATEMENT) = OFF

  Table Activity Information (TABLE) = OFF

  Take Timestamp Information (TIMESTAMP) = ON 06-12-2006 10:30:00.028810

  Unit of Work Information (UOW) = OFF

  观察上述输出后,您会立即注意到 TIMESTAMP 快照监控器开关已打开,而其他所有开关均为关闭。紧接于 TIMESTAMP 监控器开关状态之后的时间戳值可以告诉您 TIMESTAMP 监控器开关被打开的准确日期和时间(本例中为 2006 年 6 月 12 日上午 10:30)。

  更改快照监控器开关的状态

  了解哪些快照监控器开关被设置为 ON、哪些快照监控器开关被设置为 OFF 之后,您可能会发现,在开始监控过程之前,有必要更改一个或多个开关的设置。快照监控器开关设置可在实例级更改,方法是通过 UPDATE DATABASE MANAGER CONFIGURATION 命令修改适当的 DB2 Database Manager 配置参数(参见表 1)。

  另一方面,快照监控器开关设置也可在应用程序级更改,方法是执行 UPDATE MONITOR SWITCHES 命令。此命令的基本语法是:

  UPDATE MONITOR SWITCHES USING [[SwitchID] ON | OFF ,...]

  其中的 SwitchID 表示要为之更改状态的一个或多个快照监控器开关。此参数可包含以下任意或全部值:BUFFERPOOL、LOCK、SORT、STATEMENT、TABLE、TIMESTAMP 以及 UOW。

  如果您希望在应用程序级将 LOCK 快照监控器开关的状态更改为 ON,可执行 UPDATE MONITOR SWITCHES 命令,如下所示:

  UPDATE MONITOR SWITCHES USING LOCKS ON

  类似地,如果您希望将 BUFFERPOOL 快照监控器开关设置为 OFF,也可执行一条 UPDATE MONITOR SWITCHES 命令,如下所示:

  UPDATE MONITOR SWITCHES USING BUFFERPOOL OFF

  在实例级设置快照监控器开关(使用 UPDATE DATABASE MANAGER CONFIGURATION 命令)将影响到受此实例控制的所有数据库(也就是说,所有与该实例控制的一个数据库建立了连接的应用程序都将继承实例配置中的开关设置)。此外,在实例级做出的快照监控器开关设置在实例重启后依然保留。

  在应用程序级设置快照监控器开关(使用 UPDATE MONITOR SWITCHES 命令)仅影响到与这一个应用程序交互的数据库。此外,开关设置仅在此应用程序的生命周期内持续。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3