CREATE EVENT SESSION [test] ON SERVER
ADD EVENT sqlserver.additional_memory_grant,
ADD EVENT sqlserver.lock_acquired(
ACTION(sqlserver.query_hash)
WHERE (([package0].[greater_than_uint64]([database_id],(4))) AND ([package0].[equal_boolean]([sqlserver].[is_system],(0)))))
ADD TARGET package0.histogram(SET filtering_event_name=N'sqlserver.lock_acquired',source=N'sqlserver.query_hash')
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=ON,STARTUP_STATE=OFF)
GO
这是带有环形缓冲区的那个:
CREATE EVENT SESSION [asdf] ON SERVER
ADD EVENT sqlserver.additional_memory_grant,
ADD EVENT sqlserver.lock_acquired(
ACTION(sqlserver.query_hash)
WHERE (([package0].[greater_than_uint64]([database_id],(4))) AND ([package0].[equal_boolean]([sqlserver].[is_system],(0)))))
ADD TARGET package0.histogram(SET filtering_event_name=N'sqlserver.lock_acquired',source=N'sqlserver.query_hash'),
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=ON,STARTUP_STATE=OFF)
GO
正如您在上面看到的,唯一的区别是第一个结果中缺少环形缓冲区目标,即使它们的机器人有一个直方图目标。
但是,如果在构建扩展事件会话时不使用模板,会话将像这样创建(我只添加了一个事件和动作):
CREATE EVENT SESSION [test] ON SERVER
ADD EVENT sqlserver.additional_memory_grant(
ACTION(sqlserver.client_pid))
WITH (STARTUP_STATE=OFF)
GO
如果您未指定目标,但选择为会话使用扩展事件向导模板,则会使用单个直方图目标创建它。
您可以通过单击向导的最后一页,然后单击“脚本”按钮来查看它。
这是我使用“脚本”按钮创建的示例。下面是我将环形缓冲区指定为目标的位置:
这是带有环形缓冲区的那个:
正如您在上面看到的,唯一的区别是第一个结果中缺少环形缓冲区目标,即使它们的机器人有一个直方图目标。
但是,如果在构建扩展事件会话时不使用模板,会话将像这样创建(我只添加了一个事件和动作):
这导致会话仅提供实时数据,可通过 XE 会话的“观看实时数据”上下文菜单查看:
您可以通过查看非常简单记录的系统函数
fn_MSxe_read_event_stream
function 来获取扩展事件返回的行的实时流,如:但是,返回数据的格式是
image
,而且显然“不是客户可读的”。