通过 Amazon RDS for Microsoft SQL Server 使用扩展事件。 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过 Amazon RDS for Microsoft SQL Server 使用扩展事件。

您可以使用 Microsoft SQL Server 中的扩展事件来捕获 Amazon RDS for SQL Server 的调试和故障排除信息。扩展事件取代了已被微软弃用的 SQL Trace 和 Server Profiler。扩展事件类似于 Profiler 跟踪,但对跟踪的事件进行更精细的控制。Amazon RDS 上的 SQL Server 版本 2016 及更高版本支持扩展事件。有关更多信息,请参阅微软文档中的扩展事件概述

对于在 Amazon RDS for SQL Server 中具有主用户权限的用户,将自动打开扩展事件。

限制和建议

在 RDS for SQL Server 上使用扩展事件时,适用以下限制:

  • 仅企业版和标准版支持扩展事件。

  • 您无法更改默认的扩展事件会话。

  • 确保将会话内存分区模式设置为NONE

  • 会话事件保留模式可以是ALLOW_SINGLE_EVENT_LOSSALLOW_MULTIPLE_EVENT_LOSS

  • 不支持 Event Tracing for Windows (ETW) 目标。

  • 确保文件目标位于D:\rdsdbdata\log目录中。

  • 为了匹配目标,请将respond_to_memory_pressure属性设置为1

  • 环形缓冲区目标内存不能大于 4 MB。

  • 不支持以下操作:

    • debug_break

    • create_dump_all_threads

    • create_dump_single_threads

  • 以下版本及更高版本支持该 rpc_completed 活动:15.0.4083.2、14.0.3370.1、13.0.5865.1、12.0.6433.1、11.0.7507.2。

在 RDS for SQL Server 上配置扩展事件

在 RDS for SQL Server 上,您可以配置扩展事件会话的某些参数的值。下表介绍了可配置的参数。

参数名称 描述 RDS 默认值 最小值 最大值
xe_session_max_memory 指定分配给会话以进行事件缓冲的最大内存量。此值对应于事件会话的max_memory设置。 4MB 4MB 8 MB
xe_session_max_event_size 指定允许用于大型事件的最大内存大小。此值对应于事件会话的max_event_size设置。 4MB 4MB 8 MB
xe_session_max_dispatch_latency 指定事件在被发送到扩展事件会话目标之前在内存中缓冲的时间。此值对应于事件会话的max_dispatch_latency设置。 30 秒 1 秒 30 秒
xe_file_target_size 指定文件目标的最大大小。此值对应于文件目标的max_file_size设置。 100MB 10 MB 1GB
xe_file_retention 指定事件会话的文件目标生成的文件的保留天数。 7 天 0 天 7 天
注意

通过将xe_file_retention设置为零,.xel 文件将在 SQL Server 解锁后自动删除。当 .xel 文件达到 xe_file_target_size 中设置的大小限制时,就会解锁。

您可以使用rdsadmin.dbo.rds_show_configuration存储过程显示这些参数的当前值。例如,使用以下 SQL 语句查看xe_session_max_memory的当前设置。

exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'

您可以使用rdsadmin.dbo.rds_set_configuration存储过程对其进行修改。例如,使用以下 SQL 语句将xe_session_max_memory设置为 4 MB。

exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4

多可用区部署的注意事项

在主数据库实例上创建扩展事件会话时,它不会传播到备用副本。您可以在新的主数据库实例上进行故障转移并创建扩展事件会话。您也可以先删除,然后再重新添加多可用区配置,以将扩展事件会话传播到备用副本。RDS 停止备用副本上的所有非默认扩展事件会话,以使这些会话不会消耗备用副本上的资源。因此,在备用副本成为主数据库实例后,确保在新的主数据库实例上手动启动扩展事件会话。

注意

此方法同时适用于 Always On 可用性组和数据库镜像。

您还可以使用 SQL Server Agent 作业跟踪备用副本,并在备用副本成为主数据库实例时启动会话。例如,在 SQL Server Agent 作业步骤中使用以下查询重新启动主数据库实例上的事件会话。

BEGIN IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE' AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE' AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1) ) BEGIN IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1') ALTER EVENT SESSION xe1 ON SERVER STATE=START IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2') ALTER EVENT SESSION xe2 ON SERVER STATE=START END END

如果这些会话处于停止状态,则此查询将在主数据库实例上重新启动事件会话xe1xe2。您还可以为此查询添加一个时间间隔比较方便的计划。

查询扩展事件文件

您可以使用 SQL Server Management Studio 或sys.fn_xe_file_target_read_file函数来查看使用文件目标的扩展事件中的数据。有关此函数的更多信息,请参阅微软文档中的sys.fn_xe_file_target_read_file (Transact-SQL)

扩展事件文件目标只能将文件写入 RDS for SQL Server 上的 D:\rdsdbdata\log 目录。

例如,使用以下 SQL 查询列出名称以xe开头的扩展事件会话的所有文件的内容。

SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);