Sql-Server

擴展事件:指定會話數據儲存留空

  • March 23, 2018

如果從未配置數據儲存會發生什麼?

在此處輸入圖像描述

如果您未指定目標,但選擇為會話使用擴展事件嚮導模板,則會使用單個直方圖目標創建它。

您可以通過點擊嚮導的最後一頁,然後點擊“腳本”按鈕來查看此內容。

這是我使用“腳本”按鈕創建的範例。下面是我指定一個環形緩衝區作為目標的地方:

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_streamfunction 來獲取擴展事件返回的行的實時流,如下所示:

DECLARE @source nvarchar(256);
DECLARE @sourceopt int;
SET @source = N'test';
SET @sourceopt = 0;

SELECT xes.type
   , CONVERT(xml, CONVERT(varbinary(max), xes.data))
FROM sys.fn_MSxe_read_event_stream(@source, @sourceopt) xes

但是,返回的數據格式是image,並且顯然是“客戶不可讀”

引用自:https://dba.stackexchange.com/questions/201712