环形缓冲区目标在内存中短暂保存事件数据。 此目标可以在以下两种模式之一中管理事件。
第一个模式是严格的先出先出 (FIFO),使用分配给目标的所有内存时,将丢弃最旧的事件。 在此模式(默认值)中,occurrence_number选项设置为 0。
第二种模式是按事件 FIFO,其中保留每个类型的指定数量的事件。 在此模式下,当目标已经使用了所有分配的内存时,将会丢弃每种类型中最早的事件。 可以配置occurrence_number选项,以指定要保留的每个类型的事件数。
下表介绍了配置环形缓冲区目标的可用选项。
| 选项 | 允许的值 | DESCRIPTION |
|---|---|---|
| 最大内存 | 任何 32 位整数。 此值是可选的。 | 要使用的最大内存量(KB)。 根据第一次达到的限制删除现有事件:max_event_limit或max_memory。 最大值为 4194303 KB。 在将环形缓冲区大小设置为 GB 范围内的限制之前,应仔细考虑,因为它可能会影响 SQL Server 中的其他内存使用者 |
| 最大事件限制 | 任何 32 位整数。 此值是可选的。 | ring_buffer 中所保留的最大事件数。 现有事件根据最先达到的限制被丢弃:max_event_limit或max_memory。 默认值 = 1000。 |
| 事件编号 | 以下值之一: 0 (默认值) = 使用分配给目标的所有内存时,将丢弃最早的事件。 任何 32 位整数 = 在按事件 FIFO 丢弃之前要保留的每个类型的事件数。 此值是可选的。 |
要使用的 FIFO 模式,如果设置为大于 0 的值,则为要保留在缓冲区中的每个类型的首选事件数。 |
将目标添加到会话
若要将环形缓冲区目标添加到扩展事件会话,必须在创建或更改事件会话时包含以下语句:
ADD TARGET package0.ring_buffer
查看目标输出
若要查看环形缓冲区目标的输出,可以使用以下查询,将 session_name 替换为事件会话的名称。
SELECT name, target_name, CAST(xet.target_data AS xml)
FROM sys.dm_xe_session_targets AS xet
JOIN sys.dm_xe_sessions AS xe
ON (xe.address = xet.event_session_address)
WHERE xe.name = 'session_name'
以下示例显示了环形缓冲区目标输出格式。
<RingBufferTarget eventsPerSec="" processingTime="" totalEventsProcessed="" eventCount="" droppedCount="" memoryUsed="">
<event name="" package="" id="" version="" timestamp="">
<data name="">
<type name="" package="" />
<value></value>
<text></text>
</data>
<action name="" package="">
<type name="" package="" />
<value></value>
<text></text>
</action>
</event>
</RingBufferTarget>