扩展事件跟踪不是使用存储过程,而是使用 DDL 创建的。下面的示例显示了具有环形缓冲区和跟踪文件目标的跟踪,以及从“sys.fn_xe_file_target_read_file”TVF 中选择以返回 XE 跟踪数据。
如果您不需要持久性并且只想将最近的事件保留在内存中,则环形缓冲区目标很有用。文件目标允许您指定最大文件大小和翻转文件的数量。如果您捕获许多事件,我建议使用文件目标。
您可以使用 SSMS 对象资源管理器创建跟踪,然后为您的应用程序需要生成脚本。
CREATE EVENT SESSION [batch_and_rpc] ON SERVER
ADD EVENT sqlserver.rpc_starting(
WHERE ([sqlserver].[client_hostname]=N'ServerName')),
ADD EVENT sqlserver.rpc_completed(
WHERE ([sqlserver].[client_hostname]=N'ServerName')),
ADD EVENT sqlserver.sql_batch_starting(
WHERE ([sqlserver].[client_hostname]=N'ServerName')),
ADD EVENT sqlserver.sql_batch_completed(
WHERE ([sqlserver].[client_hostname]=N'ServerName'))
ADD TARGET package0.event_file(SET filename=N'C:\TraceFiles\batch_and_rpc.xel'),
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
ALTER EVENT SESSION [batch_and_rpc] ON SERVER STATE = START;
GO
SELECT *
FROM sys.fn_xe_file_target_read_file('C:\TraceFiles\batch_and_rpc*.xel', null, null, null);
GO
要删除 XE 会话:
DROP EVENT SESSION [batch_and_rpc] ON SERVER;
您还可以使用 Microsoft.SqlServer.XEvent 命名空间中的对象来读取 XE 数据。但是请注意,该方法没有得到很好的记录。请参阅http://blogs.msdn.com/b/extended_events/archive/2011/07/20/introducing-the-extended-events-reader.aspx。