7

如何清除存储在文件中的SQL Server扩展事件?

背景

SQL Server 扩展事件事件文件目标的文件存储在哪里?

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

在此处输入图像描述

我会遵循 Microsoft 的 SQL Server 论坛上的建议:

清除文件目标中的事件?

如果不再需要,只需停止会话并删除 .xel 文件。

尝试#3

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

  • 清除
  • 删除
  • 清除
  • 空的

除了没有选择做任何这些明显的事情:

在此处输入图像描述

尝试#4

我还尝试进入Extended Events菜单,然后单击Clear Data。但是该选项被莫名其妙地禁用:

在此处输入图像描述

尝试#5

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

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

尝试#6

在 SQL Server Profiler 中。如果您想清除事件,请按下按钮清除事件:

在此处输入图像描述

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


清除事件的方法是什么?

奖金阅读

4

3 回答 3

8

默认情况下,路径似乎是

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

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

于 2018-02-16T17:05:10.983 回答
3

你也可以使用

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 
于 2018-11-14T22:20:58.080 回答
0

以下是获取文件路径的方法:

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]);

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

于 2020-05-13T16:40:25.847 回答