工作单元事件监视

每当完成工作单元时(即,每当执行落实或回滚时),工作单元事件监视器都会记录一个事件。 这些有关各工作单元的历史信息对于退款用途(按 CPU 使用情况付款)和监视是否符合响应时间服务级别目标很有用。

工作单元事件监视器是从系统角度监视请求指标的一种方法。与工作单元事件监视器最紧密相关的替代项或补充项是统计事件监视器和 MON_GET_UNIT_OF_WORK 及 MON_GET_UNIT_OF_WORK_DETAILS 表函数。

可使用工作单元事件监视器来收集工作单元内使用的程序包列表以及使用该工作单元时所处的嵌套级别。此信息有助于顺利诊断存储过程。还可为工作单元内运行的语句生成可执行标识及关联语句级别指标的列表。

要创建工作单元事件监视器并收集工作单元事件监视数据,您必须具有 DBADM 或 SQLADM 权限。

创建工作单元事件监视器

您可选择将工作单元事件监视器的输出写至无格式事件 (UE) 表或常规表。有关如何选择最适当的输出格式的更多信息,请参阅Output options for event monitors

不管您使用哪种类型的表,在您创建工作单元事件监视器时,都应标识您计划存储包含该事件监视器的输出的表的表空间。建议的做法是配置专用表空间来存储该表。但是,创建事件监视器时可指定现有表空间。如果未指定表空间,那么系统将为您选择表空间。

要使用缺省值和最佳实践来创建工作单元事件监视器,请使用 CREATE EVENT MONITOR 语句。以下样本语句将尽可能使用缺省值,并指定输出将存储在 MY_EVMON_TABLESPACE 表空间内的 UE 表中:
CREATE EVENT MONITOR MY_UOW_EVMON
  FOR UNIT OF WORK
   WRITE TO UNFORMATTED EVENT TABLE (IN MY_EVMON_TABLESPACE)

配置数据收集

可对工作单元数据指定 4 个不同收集级别:
  1. 基本工作单元数据
    1. 有关在工作单元内运行的程序包的信息
    2. 在工作单元内运行的语句的可执行标识的列表。
可使用数据库配置参数来控制针对数据库中处于活动状态的所有工作单元事件监视器的工作单元数据收集。或者,要控制针对特定工作负载、服务类或工作操作的信息收集,可对适当的工作负载对象使用 CREATE 和 ALTER 语句。
要在数据库级别配置数据收集,请使用 UPDATE DATABASE CONFIGURATION 命令来设置 mon_uow_data 数据库配置参数及(可选)mon_uow_pkglistmon_uow_execlist 数据库配置参数。这些参数值的可能组合显示在表 1中:
表 1. 工作单元事件监视器配置参数的可能值
要收集的数据 mon_uow_data mon_uow_pkglist mon_uow_execlist
不收集工作单元数据 NONE(缺省值) OFF(缺省值) OFF(缺省值)
仅收集基本工作单元数据 BASE OFF(缺省值) OFF(缺省值)
收集程序包列表信息,但不收集有关可执行标识的信息 BASE ON OFF(缺省值)
收集有关可执行标识的信息,但不收集程序包列表 BASE OFF(缺省值) ON
收集基本工作单元数据、程序包列表信息和有关可执行标识的信息 BASE ON ON
提示:
  • 如果未设置任何配置参数,那么不会收集任何工作单元数据,除非您已启用针对特定工作负载对象的收集。可通过对适当工作负载对象类型使用 CREATE 或 ALTER 语句(例如,CREATE SERVICE CLASS 或 ALTER WORKLOAD 语句)来启用针对特定工作负载对象的收集。
  • 要收集基本工作单元数据而不收集程序包列表或可执行标识信息,可将 mon_uow_data 配置参数设置为 BASE 并省略 mon_uow_pkglistmon_uow_execlist 配置参数。如果未显式设置它们,那么会使用 OFF 的缺省值。
  • 要收集程序包列表和/或可执行标识信息,还必须将 mon_uow_data 配置参数设置为 BASE。如果将 mon_uow_data 配置参数设置为 NONE,那么不会收集任何信息,不管 mon_uow_pkglistmon_uow_execlist 配置参数的设置如何都是如此。
要控制针对特定工作负载对象的数据收集,请对您关心的特定工作负载对象类型使用 CREATE 或 ALTER 语句的 COLLECT UNIT OF WORK DATA 子句。例如,要收集工作负载 REPORTS 的基本工作单元事件数据和程序包列表信息,可发出类似如下的语句:
ALTER WORKLOAD REPORTS COLLECT UNIT OF WORK DATA BASE INCLUDE PACKAGE LIST
要收集程序包列表信息和工作单元中运行的语句的可执行标识列表,可使用以下语句:
ALTER WORKLOAD REPORTS COLLECT UNIT OF WORK DATA BASE INCLUDE PACKAGE LIST,
 EXECUTABLE LIST
表 1 中显示的设置将应用于系统中运行的所有工作负载,除非您使用 CREATE WORKLOAD 或 ALTER WORKLOAD 语句来覆盖特定工作负载的这些设置。如果不仅想要收集所有工作负载的基本级别信息,而且想要收集所选工作负载的程序包列表信息,请将 mon_uow_data 数据库配置参数设置为 BASE。然后,使用 CREATE WORKLOAD 或 ALTER WORKLOAD 语句对您关心的工作负载将级别设置为 BASE PACKAGE LIST。
缺省情况下,适用表函数和事件监视器(包括工作单元事件监视器)会收集并报告请求指标。可按如下所示更改缺省设置:
  • 通过使用 mon_req_metrics 数据库配置参数
  • 通过对服务超类使用 CREATE SERVICE CLASS 或 ALTER SERVICE CLASS 语句的 COLLECT REQUEST METRICS 子句。
更改缺省设置会影响任何可报告请求指标的表函数或事件监视器。

访问工作单元事件监视器捕获的事件数据

工作单元事件监视器可将数据写至常规表,也可将二进制格式的数据写至无格式事件 (UE) 表。可使用 SQL 来访问常规表中的数据。

要访问 UE 表中的数据,请使用下列其中一个表函数:
EVMON_FORMAT_UE_TO_XML
将无格式事件表中的数据抽取到 XML 文档中。
EVMON_FORMAT_UE_TO_TABLES
将无格式事件表中的数据抽取到一组关系表中。
如果使用这些表函数的其中一个,那么可通过包括 SELECT 语句作为该函数的其中一个参数来指定要抽取的数据。您可以对 SELECT 语句所提供的选择、排序和其他方面功能进行全面控制。

如果要生成程序包列表信息,那么可使用 EVMON_FORMAT_UE_TO_XML 表函数来生成单个 XML 文档,该文档包含基本工作单元事件监视数据和程序包列表。EVMON_FORMAT_UE_TO_TABLES 过程将生成两个表,一个表用于保存基本工作单元事件监视器信息,另一个表用于保存程序包列表信息。可以使用 MEMBER、APPLICATION_ID 和 UOW_ID 列中的值来连接这两个表。

还可使用 db2evmonfmt 命令来帮助执行以下任务:
  • 根据以下属性来选择您关心的事件:事件标识、事件类型、时间段、应用程序、工作负载或服务类
  • 选择是以文本报告形式还是带格式 XML 文档形式来接收输出
  • 通过创建您自己的 XSLT 样式表(而不是使用 db2evmonfmt 命令所提供的 XSLT 样式表)来控制输出格式
例如,以下命令提供工作单元报告,它在数据库 SAMPLE 中选择过去 24 小时内发生的工作单元事件。可从名为 SAMPLE_UOW_EVENTS 的无格式事件表中获取这些事件记录。该命令通过使用 MyUOW.xsl 样式表来创建带格式文本输出。
java db2evmonfmt -d SAMPLE -ue SAMPLE_UOW_EVENTS -ftext -ss MyUOW.xsl -hours 24