Sql-Server
擴展事件:指定會話數據儲存留空
如果從未配置數據儲存會發生什麼?
如果您未指定目標,但選擇為會話使用擴展事件嚮導模板,則會使用單個直方圖目標創建它。
您可以通過點擊嚮導的最後一頁,然後點擊“腳本”按鈕來查看此內容。
這是我使用“腳本”按鈕創建的範例。下面是我指定一個環形緩衝區作為目標的地方:
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 來獲取擴展事件返回的行的實時流,如下所示: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
,並且顯然是“客戶不可讀”。