包是 SQL Server 扩展事件对象的容器。 有三种类型的扩展事件包,其中包括:
package0 - 扩展事件系统对象。 这是默认包。
sqlserver - SQL Server 相关对象。
sqlos - SQL Server 操作系统(SQLOS)相关对象。
注释
SecAudit 包由 SQL Server 审核使用。 包中的对象都不能通过扩展事件数据定义语言(DDL)获得。
包由名称、GUID 和包含包的二进制模块标识。 有关详细信息,请参阅sys.dm_xe_packages(Transact-SQL)。
包可以包含以下任何或全部对象,本主题稍后将更详细地讨论这些对象:
事件
目标
行动
类型
谓词
地图
来自不同包的对象可以在事件会话中混合。 有关详细信息,请参阅 SQL Server 扩展事件会话。
包装内容
下图显示了包中可以存在的对象,这些对象包含在模块中。 模块可以是可执行文件或动态链接库。
事件
事件是在程序执行路径(例如 SQL Server)中用于监控的关注点。 事件的触发意味着达到了兴趣点,并附带了事件触发时的状态信息。
事件可以专门用于跟踪目的或触发动作。 这些操作可以是同步的,也可以是异步的。
注释
事件对事件启动时可能会被触发的行动没有任何了解。
包中的一组事件在向扩展事件注册后无法更改。
所有事件都有一个版本控制架构,用于定义其内容。 此架构由定义良好的类型的事件列组成。 特定类型的事件必须始终按架构中指定的顺序提供其数据。 但是,事件目标不必使用提供的所有数据。
事件分类
扩展事件使用类似于 Windows 事件跟踪的事件分类模型(ETW)。 两个事件属性用于分类、通道和关键字。 使用这些属性支持将扩展事件与 ETW 及其工具集成。
渠道
通道标识事件的受众。 下表介绍了这些通道。
| 术语 | 定义 |
|---|---|
| 管理员 | 管理员事件主要面向最终用户、管理员和支持。 管理员频道中的事件表明存在一个问题,该问题有一个明确的解决方案,管理员可以对此采取行动。 管理员事件的示例是应用程序无法连接到打印机。 这些事件要么记录良好,要么有一条消息与之关联,告知读者要做什么来纠正问题。 |
| 可操作 | 操作事件用于分析和诊断问题或匹配项。 它们可用于基于问题或匹配项来触发工具或任务。 一个操作事件的例子是在系统中添加或移除打印机。 |
| 分析 | 分析事件被大量发布。 它们描述程序的运行,通常用于性能分析。 |
| 调试 | 调试事件仅由开发人员用来诊断调试问题。 注意:调试通道中的事件返回内部实现特定的状态数据。 事件返回的架构和数据可能会在 SQL Server 的未来版本中更改或失效。 因此,调试通道中的事件可能会在 SQL Server 的未来版本中更改或删除,而无需注意。 |
关键字
关键字特定于应用程序,可对相关事件进行更精细的分组,从而更轻松地指定和检索要在会话中使用的事件。 可以使用以下查询来获取关键字信息。
select map_value Keyword from sys.dm_xe_map_values
where name = 'keyword_map'
注释
关键字将紧密映射到 SQL 跟踪事件的当前分组。
目标
目标为事件使用者。 针对进程事件,在触发事件的线程上同步处理事件,或在系统提供的线程上异步处理事件。 扩展事件提供了多个目标,可根据需要用于定向事件输出。 有关详细信息,请参阅 SQL Server 扩展事件目标。
行动
操作是对事件做出的一个编程方式的响应或一系列响应。 操作与事件绑定在一起,并且每个事件都可能具有唯一的一组操作。
注释
用于特定事件集的作无法绑定到未知事件。
绑定到事件的动作在触发事件的线程上同步调用。 有许多类型的操作,它们的功能非常广泛。 动作可以:
捕获堆栈转储并检查数据。
使用变量存储将状态信息存储在本地上下文中。
聚合事件数据。
将数据追加到事件数据。
一些典型的和众所周知的作示例包括:
堆栈转储器
执行计划检测(仅限 SQL Server)
Transact-SQL 堆栈集合(仅限 SQL Server)
运行时统计信息计算
收集有关异常的用户输入
谓词
谓词是一组逻辑规则,用于在处理事件时评估事件。 这使扩展事件用户能够根据特定条件选择性地捕获事件数据。
谓词可以在本地上下文中存储数据,该上下文可用于创建谓词,该谓词每 n 分钟返回一次,或事件触发的每 n 次返回一次。 此本地上下文存储还可用于动态更新谓词,从而在事件包含类似数据时抑制将来的事件触发。
谓词能够检索上下文信息,例如线程 ID 以及事件特定的数据。 谓词被评估为完整的布尔表达式,并支持在整个表达式首次被判定为 false 时进行短路求值。
注释
如果早期谓词检查失败,则可能无法评估具有副作用的谓词。
类型
由于数据是串在一起的字节集合,因此需要字节集合的长度和特征才能解释数据。 此信息封装在 Type 对象中。 为包对象提供以下类型:
事件
行動
目标
预测源
pred_compare
类型
有关详细信息,请参阅sys.dm_xe_objects(Transact-SQL)。
地图
地图表将内部值映射到字符串,使用户能够知道值表示的内容。 用户可以获取内部值的有意义说明,而不是只能获取数值。 以下查询演示如何获取映射值。
select map_key, map_value from sys.dm_xe_map_values
where name = 'lock_mode'
上述查询生成以下输出。
map_key map_value
---------------------
0 NL
1 SCH_S
2 SCH_M
3 S
4 U
5 X
6 IS
7 IU
8 IX
9 SIU
10 SIX
11 UIX
12 BU
13 RS_S
14 RS_U
15 RI_NL
16 RI_S
17 RI_U
18 RI_X
19 RX_S
20 RX_U
21 RX_X
21 RX_X
以此表为例,假定你有一个列命名模式,其值为 5。 该表显示数字 5 映射到 X,这意味着锁类型是独占。