CREATE EVENT MONITOR(工作单元)语句
CREATE EVENT MONITOR(工作单元)语句创建一个事件监控器,当工作单元完成时记录事件。
注意:随着Db2 12.1 的发布,工作单元事件监控器的 UNFORMATTED EVENT TABLE 选项已被弃用,并可能在未来的版本中删除。 相反,请使用 "写入目标 "选项。
调用
此语句可嵌入应用程序中或者以交互方式发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。 事件监控器只能在 SYSTEM 租户中定义(SQLSTATE 58004)。
授权
该语句的授权标识所拥有的特权必须包括以下权限之一:
- DBADM 权限
- SQLADM 权限
语法
描述
- event-monitor-name
- 事件监视器的名称。 这是一部分名称。 这是一个 SQL 标识(普通标识或定界标识)。 event-monitor-name 不能标识目录中已存在的事件监视器 (SQLSTATE 42710)。
- FOR
- 指示要记录的事件类型。
- UNIT OF WORK
- 指定此被动事件监视器将在工作单元完成时 (即,每当有落实或回滚时) 记录事件。
创建工作单元事件监视器并不表示将立即收集工作单元数据。 实际关注的工作单元事件在工作负载级别进行控制。
- WRITE TO
- 指定数据的目标。
- 表
- 指示事件监视器数据的目标是一组数据库表。 事件监视器将数据流分成一个或多个逻辑数据组,并将每个组插入到单独的表中。 将保留具有目标表的组的数据,并丢弃没有目标表的组的数据。 该组中包含的每个监视器元素都会映射到同名的表列。 只会将具有对应表列的元素插入到该表中。 将丢弃其他元素。
- formatted-event-table-info
- 定义事件监视器的目标格式化事件表。 此子句应指定要记录的每个分组。 但是,如果未指定 evm-group 子句,那么将记录事件监视器类型的所有组。
有关逻辑数据组的更多信息,请参阅 逻辑数据组和事件监视器输出表 。
- evm-group
- 标识要为其定义目标表的逻辑数据组。 该值取决于事件监视器的类型,如下表中所示:
事件监视器的类型 evm-group 值 工作单元 - UOW
- UOW_METRICS
- UOW_PACKAGE_LIST
- uow_executable_list
- CONTROL
- 标识要为其定义目标表的逻辑数据组。 该值取决于事件监视器的类型,如下表中所示:
- 无格式事件表
- 指定事件监视器的目标是无格式事件表。 无格式事件表用于存储收集的工作单元事件监视器数据。 数据以其原始二进制格式存储在直接插入的 BLOB 列中。 BLOB 列可以包含多个不同类型的二进制记录。 BLOB 列中的数据不是可读格式,需要通过使用基于 db2evmonfmt Java™的工具 EVMON_FORMAT_UE_TO_XML 表函数或 EVMON_FORMAT_UE_TO_TABLES 过程将其转换为可使用的格式,例如 XML 文档或关系表。
- target-table-options
- 标识目标表的选项。 如果未指定 target-table-options 的值,那么 CREATE EVENT MONITOR 处理将继续进行,如下所示:
- 将使用派生表名称 (如
TABLE table-name的描述中所述)。 - 使用与使用 CREATE TABLE 创建没有表空间名称的表时相同的过程来选择缺省表空间。
- PCTDEACTIVATE 设置为 100。
- TABLE table-name
- 指定目标表的名称。 目标表必须是非分区表。 如果名称未限定,那么表模式缺省为 CURRENT SCHEMA 专用寄存器中的值。 对于无格式事件表 (如果未提供名称) ,未限定的名称等于 event-monitor-name,即,无格式事件表将在事件监视器之后命名。 对于格式化事件表 (如果未提供名称) ,非限定名派生自 evm-group 和 event-monitor-name ,如下所示:
substring(evm-group CONCAT '_' CONCAT event-monitor-name,1,128) - IN 表空间名称
- 指定要在其中创建表的表空间。 CREATE EVENT MONITOR FOR UNIT OR WORK 语句不会创建表空间。
如果未提供表空间名称,那么将使用与使用 CREATE TABLE 在没有表空间名称的情况下创建表时相同的进程来选择表空间。
由于页面大小会影响所用的 INLINE LOB 长度,因此会考虑指定具有尽可能大的页面大小的表空间,以便提高事件监视器的 INSERT 性能。
- PCTDEACTIVATE integer
- 如果要在自动存储(非临时)或 DMS 表空间中创建事件监视器的表,那么 PCTDEACTIVATE 参数会指定在自动停用事件监视器之前表空间必须达到的填满程度。 指定的值(表示一个百分比)可以介于 0 到 100 之间,其中 100 表示在表空间完全填满时才会停用事件监视器。 如果未指定 PCTDEACTIVATE,那么将使用缺省值 100。 对于 SMS 表空间,将忽略此选项。要点: 如果目标表空间启用了自动调整大小,请将 PCTDEACTIVATE 参数设置为 100。 或者,完全省略此子句以应用缺省值 100。 否则,如果在表空间自动调整大小之前表空间达到 PCTDEACTIVTATE 指定的阈值,那么可能会意外停用事件监视器。
- 将使用派生表名称 (如
- AUTOSTART
- 指定每当激活用于运行事件监视器的数据库分区时,都会自动激活事件监视器。 这是工作单元事件监视器的缺省行为。
- MANUALSTART
- 指定必须使用 SET EVENT MONITOR STATE 语句手动激活事件监视器。 在激活 MANUALSTART 事件监视器后,只能使用 SET EVENT MONITOR STATE 语句或通过停止实例来停用该事件监视器。
注意
- 如果 CREATE EVENT MONITOR FOR UNIT OF WORK 语句尚不存在,那么将在该语句执行时创建该表。
- 在 CREATE EVENT MONITOR FOR UNIT OF WORK 处理期间,如果发现某个表已定义为供另一个事件监视器使用,那么 CREATE EVENT MONITOR FOR UNIT OF WORK 语句将失败,并且会将错误传递回应用程序。 将定义一个表以供其他事件监视器使用(前提是该表名与在 SYSCAT.EVENTTABLES 目录视图中找到的值匹配)。 如果该表存在并且未定义为供另一个事件监视器使用,那么不会创建任何表,将忽略任何其他表 target-table-options 参数,并且将继续处理。 系统将一条警告传递回应用程序。
- 删除事件监视器不会删除任何表。 删除事件监视器后,必须手动删除任何关联的表。
- 不会自动从此事件监视器创建的无格式事件表或常规表中修剪锁定事件数据。 使用 EVMON_FORMAT_UE_TO_TABLES 过程时,可以使用用于从 UE 表中修剪数据的选项。 对于写入常规表的事件监视器,必须手动修剪事件数据。
- 对于无格式事件表,会将事件数据插入到表中的内联 BLOB 数据列中。 通常, BLOB 数据存储在单独的 LOB 表空间中,因此可能会迂到额外的性能开销。 当直接插入到基本表的数据页面中时, BLOB 数据不会迂到此开销。 如果 BLOB 数据的大小小于表空间页大小减去记录前缀,那么数据库管理器将自动内联无格式事件表记录的 BLOB 数据部分。 因此,为了实现高效率和应用程序吞吐量,建议您在尽可能大的表空间中创建事件监视器,直至并包括 32 KB 表空间和关联的缓冲池。
- 每个数据库仅创建一个工作单元事件监视器,而不在同一数据库上创建多个工作单元事件监视器。
- 在分区数据库环境中,数据仅写入其表空间所在的数据库分区上的目标表。 如果目标无格式事件表的表空间在某些数据库分区上不存在,那么将忽略该目标表的数据。 此行为允许用户创建只在特定数据库分区中存在的表空间,从而选择要监视的部分数据库分区。
- 在多成员环境中,仅将数据写入工作单元中发生工作的成员上的目标表。
- 在分区数据库环境中,如果某些目标表不驻留在数据库分区上,但其他目标表确实驻留在同一数据库分区上,那么将仅记录驻留在该数据库分区上的目标表的数据。
- 工作单元事件监视器不受单元或工作事件监视器开关影响。 创建单元或工作事件监视器时,不会更改工作单元事件监视器开关,并且对工作单元事件监视器开关的更改不会影响单元或工作事件监视器的内容。
- FLUSH EVENT MONITOR 语句不适用于此事件监视器,并且对其发出此语句将不起作用。
- 创建工作单元事件监视器不会导致将事件写入事件监视器。 必须使用 SET EVENT MONITOR STATE 来激活工作单元事件监视器,并且必须通过更改相应的工作负载以指定 COLLECT UNIT OF WORK DATA 或将 mon_uow_data 数据库配置参数设置为 NONE 以外的值来收集工作单元数据。
- 使用无格式事件表时,请在页大小至少为 8 KB 的表空间中创建工作单元事件监视器,以确保事件数据包含在无格式事件表的内联 BLOB 列中。 如果不直接插入 BLOB 列,那么对无格式事件表读写事件的效率可能不高。
示例
- 示例 1: 此示例创建工作单元事件监视器 UOWEVMON ,该监视器收集创建数据库上发生的工作单元事件的数据,并使用缺省表名写入数据表:
CREATE EVENT MONITOR UOWEVMON FOR UNIT OF WORK WRITE TO TABLE此事件监视器将其输出写入以下表:- UOW_UOWEVMON
- uow_metrics_uowevmon
- uow_package_list_uowevmon
- uow_executable_list_uowevmon
- uow_control_uowevmon
注: 是否使用数据填充程序包列表和可执行列表信息的表取决于您是否指定要收集该数据。 您控制此数据的收集是使用 mon_uow_pkglist 或 mon_uow_execlist 配置参数,还是使用 CREATE 或 ALTER WORKLOAD 语句上相应的 COLLECT UNIT OF WORK DATA 子句。 - 示例 2: 此示例创建工作单元事件监视器 UOWEVMON ,该监视器将收集创建数据库上发生的工作单元事件,并将其存储在无格式事件表 GREG.UOWEVENTS。
CREATE EVENT MONITOR UOWEVMON FOR UNIT OF WORK WRITE TO UNFORMATTED EVENT TABLE (TABLE GREG.UOWEVENTS) - 示例 3: 此示例创建工作单元事件监视器 UOWEVMON ,该监视器将收集创建数据库上发生的工作单元事件,并将其存储在无格式事件表 GREG.UOWEVENTS 。 当表空间变满 85% 时,事件监视器将取消激活。
CREATE EVENT MONITOR UOWEVMON FOR UNIT OF WORK WRITE TO UNFORMATTED EVENT TABLE (TABLE GREG.UOWEVENTS IN APPSPACE PCTDEACTIVATE 85)
