如何清除 SQL 服务器扩展事件事件文件

How to clear SQL Server Extended Events Event File

如何清除存储在文件中的SQL服务器扩展事件

背景

SQL 服务器扩展事件事件文件目标的文件存储在哪里?

我想删除几个月的日志文件;但是 SQL 服务器没有告诉我文件在哪里:

我会听从 Microsoft SQL 服务器论坛上的建议:

Clear events in file target?

Simply stop the session and delete .xel file if it’s no longer required.

尝试#3

我尝试做一件最明显的事情,任何称职的用户界面设计师都会从一开始就创建:右键单击 事件文件 目标,然后 select:

除了没有选项可以做任何这些显而易见的事情:

尝试#4

我还尝试进入 扩展事件 菜单,然后单击 清除数据 。但是该选项莫名其妙地被禁用:

尝试#5

我还尝试编写 Extended Events Session 的脚本,以便查看它存储文件的位置。但是当然 SQL 服务器团队没有帮助:

ADD TARGET package0.event_file(SET filename=N'Expensive Queries',max_file_size=(25),max_rollover_files=(4)),

尝试#6

在 SQL 服务器分析器中。如果您想清除事件,请按下按钮以清除事件:

SQL Profiler 已弃用,其替代品无法清除事件。


清除事件的方法是什么?

红利阅读

默认情况下,路径似乎是

C:\Program Files\Microsoft SQL Server\MSSQLXX.MSSQLSERVER\MSSQL\Log\*.xel

或者基本上是为 SQL 服务器保留系统文件的任何地方(即默认的 ERRORLOG 位置)。如果那里什么都没有,那么可能是您的扩展事件设置为环形缓冲区,在这种情况下,只会保留最新信息并将其存储在内存中。似乎在这种情况下清除日志的唯一方法是停止并启动会话。

您也可以使用

DECLARE @SQLDataRoot VARCHAR(400)
EXEC master..xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE', 
 @key = 'SOFTWARE\Microsoft\MSSQLServer\Setup', 
 @value_name = 'SQLDataRoot', @value = @SQLDataRoot OUTPUT
 SELECT @SQLDataRoot 

获取文件路径的方法如下:

SELECT n.value('(@name)[1]','varchar(255)') AS FilePath
FROM 
(
    SELECT CAST(t.target_data AS XML) target_data
    FROM sys.dm_xe_sessions s
        INNER JOIN sys.dm_xe_session_targets t ON t.event_session_address = s.address
    WHERE s.name = 'Your Session Name'
        AND t.target_name = N'event_file'
) AS tab
    CROSS APPLY [target_data].[nodes]('EventFileTarget/File') AS [q] ([n]);

我发现清除数据的唯一方法是删除会话,删除文件,然后重新创建会话。