扩展事件会话

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

扩展事件会话是在承载扩展事件引擎的 SQL Server 数据库引擎进程中创建的。 扩展事件会话的以下各方面信息可为您理解扩展事件基础结构和所发生的处理提供有关背景知识:

  • 会话状态。 执行 CREATE EVENT SESSIONALTER EVENT SESSION 语句时扩展事件会话所处的不同状态。

  • 会话内容和特征。 扩展事件会话的内容(例如目标和事件)以及这些对象在某个会话中或多个会话间的关系。

会话状态

下图说明了扩展事件会话的不同状态。

关系图显示扩展事件会话状态。

对照前面的图,可以观察到在对事件会话发出不同的数据定义语言 (DDL) 命令时会话状态将发生更改。 下表说明了这些状态更改。

图例标签 DDL 语句 说明
创建 CREATE EVENT SESSION 主机进程将创建一个会话对象,其中包含由 CREATE EVENT SESSION 提供的元数据。 主机进程将验证会话定义和用户权限级别,并将元数据存储在 master 数据库中。 此时该会话处于不活动状态。
Alter %> 主机进程启动会话。 主机进程将读取存储的元数据、验证会话定义、验证用户权限级别并创建会话。 此操作还将载入会话对象(例如事件和目标),此时事件处理即处于活动状态。
Alter %> 主机进程将停止活动会话,但会保留元数据。
Drop DROP EVENT SESSION 此“删除”(DROP SESSION) 操作将删除元数据并关闭活动会话,或仅删除会话元数据;具体取决于会话是否处于活动状态。

会话内容和特征

扩展事件会话包括隐含的边界,因为一个会话的配置不会更改另一个会话的配置。 但是,这些边界不会阻止在多个会话中同时使用某个事件或目标类型。

下图说明了会话内容以及包和会话之间的关系。

关系图显示会话中的对象共存和共享。

对照前面的图,请注意:

  • 包对象与会话之间的映射是多对多映射,也就是说,特定类型的对象可在多个会话中出现,一个会话也可包含多个对象。
  • 可在多个会话中使用同一个事件 (Event 1) 或目标类型 (Target 1)。

会话具有以下特征:

  • 对于每个会话,操作和谓词均将绑定到事件。 如果在会话 A 中包含事件 1(绑定有操作 1 和谓词 Z),这不会对会话 B 中包含事件 1(绑定有操作 2 和操作 3,但没有谓词)有任何影响。
  • 策略将被附加到会话以处理缓冲和调度以及因果关系跟踪。

缓冲指运行事件会话期间事件数据的存储方式。 缓冲策略将指定用于事件数据的内存大小以及针对事件的丢失策略。 调度指事件在被传递给目标进行处理之前驻留在缓冲区的时间。

因果关系跟踪可在多个任务进行跟踪工作。 当启用因果关系跟踪时,每个激发的事件在系统中都具有一个唯一的活动 ID。 活动 ID 是 GUID 值和序列号的组合,GUID 值对于某项任务的所有事件将保持不变,而序列号将随着事件的每次激发而递增。 当一项任务导致对另一项任务执行工作时,父任务的活动 ID 将发送到子任务。 子任务将在其第一次激发事件时输出父任务的活动 ID。