SQL Server 扩展事件会话是在托管扩展事件引擎的 SQL Server 进程中创建的。 扩展事件会话的以下方面提供背景,以了解扩展事件基础结构以及所发生的常规处理过程:
会话状态。 执行 CREATE EVENT SESSION 和 ALTER EVENT SESSION 语句时,扩展事件会话处于不同的状态。
会话内容和特征。 扩展事件会话的内容,例如目标和事件,以及这些对象在会话中或会话之间的关联方式。
会话状态
下图显示了扩展事件会话的各种状态。
请参阅前图,注意当为事件会话发出不同的 DDL 命令时,会话状态发生变化。 下表描述了这些状态更改。
| 插图标签 | DDL 语句 | DESCRIPTION |
|---|---|---|
| 创建 | 创建事件会话 | 主机进程创建一个会话对象,该对象包含 CREATE EVENT SESSION 提供的元数据。 主机进程验证会话定义、验证用户权限级别,并将元数据存储在 master 数据库中。 此时会话不处于活动状态。 |
| 更改 | ALTER EVENT SESSION,状态=启用 | 主机进程启动会话。 主机进程读取存储的元数据、验证会话定义、验证用户权限级别并创建会话。 加载会话对象(如事件和目标),并且事件处理处于活动状态。 |
| 更改 | ALTER EVENT SESSION, STATE=STOP | 主机进程停止活动会话,但会保留元数据。 |
| 删除 | 删除事件会话 | 根据会话是否处于活动状态,Drop (DROP SESSION) 将删除元数据并关闭活动会话,或删除会话元数据。 |
注释
ALTER EVENT SESSION 和 DROP EVENT SESSION 都可以应用于元数据或活动会话及元数据。
会话内容和特征
扩展事件会话具有隐含边界,即一个会话的配置不会更改另一个会话的配置。 但是,这些边界不会妨碍事件或目标在多个会话中使用。
下图显示了会话内容以及包和会话之间的关系。
请参阅上图,请注意:
包对象和会话之间的映射很多到多个,这意味着对象可以出现在多个会话中,而会话可以包含多个对象。
可以在多个会话中启用同一事件(事件 1)或目标(目标 1)。
会话具有以下特征:
动作和谓词在每个会话的基础上绑定到事件。 如果在会话 A 中有事件 1(动作 1 和谓词 Z),则这不会影响在会话 B 中有事件 1 与动作 2 和动作 3 且没有谓词。
策略附加到会话以处理缓冲和调度以及因果关系跟踪。
缓冲和调度
缓冲是指事件会话运行时事件数据的存储方式。 缓冲策略指定要用于事件数据的内存量,以及事件的丢失策略。 调度是指事件在提供给目标进行处理之前将保留在缓冲区中的时间量。
因果关系跟踪
因果关系跟踪提供跨多个任务跟踪工作的功能。 启用因果关系跟踪后,触发的每个事件在系统中都有唯一的活动 ID。 活动 ID由一个在任务的所有事件中保持不变的GUID值和一个随着每次事件触发而递增的序列号组成。 当一个任务导致执行另一个任务时,父任务的活动 ID 将发送到子任务。 子任务在首次触发事件时输出父的活动 ID。
扩展事件体系结构提供了一个灵活的系统,允许将各种对象一起使用来解决特定问题。