通过 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_LOSS
或ALLOW_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
如果这些会话处于停止状态,则此查询将在主数据库实例上重新启动事件会话xe1
和xe2
。您还可以为此查询添加一个时间间隔比较方便的计划。
查询扩展事件文件
您可以使用 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);