创建写至无格式事件 (UE) 表的事件监视器

如果事件监视数据收集的性能特别重要,那么您可选择让事件监视器将其输出写至无格式事件 (UE) 表。写至 UE 表的大部分数据作为直接插入二进制数据写入,这可以提高收集数据时的 I/O 速度。

对于事件监视器,UE 表优胜于常规表的另一点是,您通常不必在事件监视器创建时考虑不同选项,例如,要使用的缓冲区大小、是阻止还是取消阻止事件监视器或者必须收集的数据类型(逻辑组)。但是,因为大部分所收集数据为二进制格式,所以必须对 UE 表执行后处理以便能检查事件数据。
注: 与 UE 表相关的可用功能如下所示:
  • 可使用过程 EVMON_UPGRADE_TABLES 来升级事件监视器在之前发行版中生成的 UE 表。此功能使您能更轻松地保留先前记录的事件监视数据。
  • 可将输出写至 UE 表的所有事件监视器也可将输出写至常规表。
  • 可使用过程 EVMON_FORMAT_UE_TO_TABLES 的选项 PRUNE_UE_TABLE 从 UE 表中剪除不必要的数据。

开始之前

创建写至无格式事件表的事件监视器时,应记住以下注意事项:
  • 您需要 SQLADM 或 DBADM 权限才能创建写至 UE 表的事件监视器。
  • 对无格式事件表使用已优化以提高性能的表空间。创建该表空间时,请记住以下准则:
    • 指定尽可能大的页大小 (PAGESIZE),最大 32KB。较大的页大小可确保包含该事件数据的 BLOB 可直接写入表行。如果因为页大小太小而不允许直接插入 BLOB,那么事件监视器的性能可能会下降。数据库管理器会尝试在无格式事件表中直接插入 BLOB 列 event_data,但这并非始终有可能实现。要检查无格式事件表中的行是否直接插入型的行,请使用 ADMIN_IS_INLINED 函数。如果这些行不是直接插入型的行,请使用 ADMIN_EST_INLINE_LENGTH 函数来确定这些行所需的空间量。
    • 指定 NO FILE CACHING SYSTEM 选项。
  • 在分区数据库环境中,考虑用于存放表空间的分区。如果目标无格式事件表的表空间在某个数据库分区中不存在,那么该目标无格式事件表的数据将加以忽略。此行为允许用户创建只在特定数据库分区中存在的表空间,从而选择要监视的部分数据库分区。

关于此任务

以下事件监视器类型支持使用 UE 表:
  • 工作单元
  • 程序包高速缓存
  • 锁定
注: 尽管名称不一样,但无格式事件表仍为关系表。锁定事件监视器生成的 UE 表与锁定事件监视器生成的常规表之间的主要差别在于 UE 表中的大部分数据以二进制格式写至 EVENT_DATA 列。有关 UE 表的结构的更多信息,请参阅无格式事件表的列定义

过程

要创建写至 UE 表的事件监视器,请执行以下操作:

  • 使用 WRITE TO UNFORMATTED EVENT TABLE 子句构造 CREATE EVENT MONITOR 语句。
    例如,要创建名为 uowmon 的工作单元事件监视器,您可使用类似如下的语句:
    CREATE EVENT MONITOR uowmon FOR UNIT OF WORK
                         WRITE TO UNFORMATTED EVENT TABLE
    缺省情况下,该事件监视器创建的 UE 表的名称与该事件监视器的名称相同。
  • 要指定缺省表名的替代项,请使用 TABLE 子句。
    例如,如果要将该 UE 表命名为 myunitsofwork,请构造类似如下的语句:
    CREATE EVENT MONITOR uowmon FOR UNIT OF WORK
                         WRITE TO UNFORMATTED EVENT TABLE
                         TABLE myunitsofwork
    还可使用 IN tablespace-name 子句指定用于存储该 UE 表的表空间:
    CREATE EVENT MONITOR uowmon FOR UNIT OF WORK
                         WRITE TO UNFORMATTED EVENT TABLE
                         TABLE myunitsofwork
                         IN mytablespace
    或者
    CREATE EVENT MONITOR uowmon FOR UNIT OF WORK
                         WRITE TO UNFORMATTED EVENT TABLE
                         IN mytablespace
    第一个示例将 UE 表 myunitsofwork 放在表空间 mytablespace 中;第二个示例将名为 uowmon 的 UE 表(缺省情况,因为不会指定任何表名)放在表空间 mytablespace 中。
  • 缺省情况下,会创建写至 UE 表的任何事件监视器以在数据库激活时自动激活。可使用 MANUALSTART 子句来覆盖此行为:
    CREATE EVENT MONITOR uowmon FOR UNIT OF WORK
                         WRITE TO UNFORMATTED EVENT TABLE
                         MANUALSTART
    
    在以上示例中,必须始终使用 SET EVENT MONITOR STATE 语句手动激活 uowmon 事件监视器。

下一步做什么

缺省情况下,V9.7 或更高版本中引入的事件监视器会创建为 AUTOSTART 事件监视器。数据库下次激活时以及此后后续数据库激活时,它们会自动激活。如果要立即激活该事件监视器,请在下一次数据库激活之前使用 SET EVENT MONITOR STATE 语句来手动启动该事件监视器。此外,对于锁定事件监视器、工作单元事件监视器和程序包高速缓存事件监视器中的每一个,还必须启用数据收集。