Azure SQL 数据库中的扩展事件

适用于: Azure SQL 数据库

Azure SQL 数据库中扩展事件的功能集是 SQL Server 和 Azure SQL 托管实例上强大功能的子集。

XEvents 不是正式名称,有时在博客或其他非正式场合表示“扩展的事件”。

有关扩展事件的其他信息,请访问:

先决条件

本主题假设读者了解以下内容:

选择事件文件作为 目标时,事先了解以下项目会很有帮助:

代码示例

相关主题提供了两个代码示例:

Transact-SQL 的差异

  • 在 SQL Server 上执行 CREATE EVENT SESSION 命令时,请使用 ON SERVER 子句。 但在 Azure SQL 数据库上,应改用 ON DATABASE 子句。

  • ON DATABASE 子句也适用于 ALTER EVENT SESSIONDROP EVENT SESSION Transact-SQL 命令。

  • 最佳做法是在 CREATE EVENT SESSIONALTER EVENT SESSION 语句中包含 STARTUP_STATE = ON 的事件会话选项。

    • = ON 值支持在由于故障转移而重新配置逻辑数据库之后自动重新启动。

新的目录视图

扩展事件功能受多个目录视图的支持。 目录视图显示有关当前数据库中用户创建的事件会话的 元数据或定义 的信息。 视图不会返回有关活动事件会话的实例的信息。

目录
视图的名称
说明
sys.database_event_session_actions 返回针对事件会话的每个事件执行的每个操作所对应的行。
sys.database_event_session_events 返回事件会话中每个事件所对应的行。
sys.database_event_session_fields 返回针对事件和目标上显式设置的每个可自定义列所对应的行。
sys.database_event_session_targets 返回事件会话的每个事件目标所对应的行。
sys.database_event_sessions 返回数据库中每个事件会话所对应的行。

在 Microsoft SQL Server 中,类似目录视图的名称包含 .server_ 而不是 .database_ 。 名称模式类似于 sys.server_event_%

新的动态管理视图 (DMV)

Azure SQL 数据库具有支持扩展事件的动态管理视图 (DMV)。 DMV 显示有关 活动 事件会话的信息。

DMV 的名称 说明
sys.dm_xe_database_session_event_actions 返回有关事件会话操作的信息。
sys.dm_xe_database_session_events 返回有关会话事件的信息。
sys.dm_xe_database_session_object_columns 显示绑定到会话的对象的配置值。
sys.dm_xe_database_session_targets 返回有关会话目标的信息。
sys.dm_xe_database_sessions 返回划归到当前数据库的每个事件会话所对应的行。

在 Microsoft SQL Server 中,类似目录视图的名称不包含 _database 部分,例如:

  • sys.dm_xe_sessions 而不是名称
    sys.dm_xe_database_sessions

两者通用的 DMV

对于扩展的事件,有通用于 Azure SQL 数据库、Azure SQL 托管实例和 Microsoft SQL Server 的其他 DMV:

  • sys.dm_xe_map_values
  • sys.dm_xe_object_columns
  • sys.dm_xe_objects
  • sys.dm_xe_packages

查找可用的扩展事件、操作和目标

可运行简单的 SQL SELECT 来获取可用事件、操作和目标的列表。

SELECT
        o.object_type,
        p.name         AS [package_name],
        o.name         AS [db_object_name],
        o.description  AS [db_obj_description]
    FROM
                   sys.dm_xe_objects  AS o
        INNER JOIN sys.dm_xe_packages AS p  ON p.guid = o.package_guid
    WHERE
        o.object_type in
            (
            'action',  'event',  'target'
            )
    ORDER BY
        o.object_type,
        p.name,
        o.name;

 

Azure SQL 数据库事件会话的目标

可从 Azure SQL 数据库上的事件会话捕获结果的目标如下:

Windows 事件跟踪 (ETW) API 不适用于 Azure SQL 数据库上的扩展事件。

限制

有几个安全相关的差异适用于 Azure SQL 数据库的云环境:

  • 扩展事件在单租户隔离模型中构建。 一个数据库中的事件会话无法访问另一个数据库中的数据或事件。
  • 无法在 master 数据库的上下文中发出 CREATE EVENT SESSION 语句。

权限模型

必须拥有数据库的 控制 权限才能发出 CREATE EVENT SESSION 语句。 数据库所有者 (dbo) 拥有 控制 权限。

存储容器授权

针对 Azure 存储容器生成的 SAS 令牌必须为权限指定 rwlrwl 值提供以下权限:

  • 读取
  • 写入
  • 列出

性能注意事项

在某些情况下,大量使用扩展事件可能累积过多的活动内存,使整个系统无法正常运行。 因此,Azure SQL 数据库会动态设置和调整事件会话可以累积的活动内存量限制。 动态计算会考虑许多因素。

如果收到错误消息,指出已强制实施内存最大值,可采取以下纠正措施:

  • 减少运行的并发事件会话。
  • 通过对事件会话执行 CREATEALTER 语句,减少在 MAX_MEMORY 子句中指定的内存量。

网络延迟

事件文件 目标在将数据保存到 Azure 存储 Blob 时可能会遇到网络延迟或故障。 Azure SQL 数据库中的其他事件可能会延迟,因为它们要等待网络通信完成。 这种延迟可能会导致工作负荷变慢。

  • 若要缓解这种性能风险,请避免在事件会话定义中将 EVENT_RETENTION_MODE 选项设为 NO_EVENT_LOSS