3

我正在查询 system_health 会话,并注意到并非所有事件都被返回。今天肯定很少有死锁,但这些不在输出中。

我遇到了这个连接文件,但从评论中这个问题已经在 SQL Server 2008 SP2 中得到解决。但我的版本是 SQL Server 2008 SP3 Standard。这里有更多细节。

那么这是一个错误还是我查询错误?

<RingBufferTarget truncated="1" eventsPerSec="31291" processingTime="209" totalEventsProcessed="6540" eventCount="1947" droppedCount="0" memoryUsed="4193813">


SELECT  TOP 1 e.event.value('(@timestamp)[1]','datetime') AS MaxDate, GETDATE() Today
FROM 
( SELECT ( SELECT 
        CONVERT(xml, target_data) 
        FROM sys.dm_xe_session_targets st 
        JOIN sys.dm_xe_sessions s ON 
        s.address = st.event_session_address 
        WHERE s.name = 'system_health' 
        AND st.target_name = 'ring_buffer' 
        )AS [x] 
        FOR XML PATH(''), TYPE 
) AS the_xml(x) 
CROSS APPLY x.nodes('x/RingBufferTarget/event') e (event) 
ORDER BY MaxDate DESC

MaxDate                     Today
2013-01-09 20:05:31.853     2013-01-11 15:22:37.887
4

1 回答 1

5

可能两者都不是,因为您仍然可以使用 max_memory 的 4MB ring_buffer 配置来达到 8MB XML 限制,这是默认设置。您还可能在扩展事件中遇到了一个不同的错误,它导致时间戳被错误地报告,我在这里写过博客:

扩展事件中的事件时间戳不正确

了解您遇到的场景的唯一方法是将 collect_system_time 的操作添加到会话中的事件中,并将文件目标添加到会话中以捕获不受 DMV 限制的媒体中的所有事件是。我要指出的是,在 SQL Server 2012 中,system_health 会话默认配置了 file_target,因此 IMO 建议在 2008 年这样做。

于 2013-01-14T20:46:06.050 回答