Sql server 如何使用扩展事件跟踪集群SQL Server中的死锁

Sql server 如何使用扩展事件跟踪集群SQL Server中的死锁,sql-server,Sql Server,我在两台虚拟机上有两台群集SQL Server 2014 enterprise。在web应用程序的日志中,我看到了死锁错误。因此,我进行了在线研究,找到了以下脚本,并在每台服务器上运行: DECLARE @targetPath nvarchar(512) = N'\MyData'; IF EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name = N'DeadlockMonitor') RETURN; DECLARE @productV

我在两台虚拟机上有两台群集SQL Server 2014 enterprise。在web应用程序的日志中,我看到了死锁错误。因此,我进行了在线研究,找到了以下脚本,并在每台服务器上运行:

DECLARE @targetPath nvarchar(512) = N'\MyData'; 

IF EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name = N'DeadlockMonitor')
    RETURN;

DECLARE @productVersionString nvarchar(128) = CONVERT(nvarchar(128), SERVERPROPERTY('ProductVersion'));
DECLARE @productVersion decimal(8, 5) = CAST(LEFT(@productVersionString, CHARINDEX('.', @productVersionString, 4) - 1) AS decimal(8, 5));

IF (@productVersion < 10)
BEGIN
    RAISERROR(N'Extended Events are not supported on this version of SQL Server.', 16, 1) WITH NOWAIT;
    RETURN;
END

DECLARE @fullTargetPath nvarchar(1024) =
    @targetPath +
        (CASE WHEN RIGHT(@targetPath, 1) != N'\' THEN N'\' ELSE N'' END) +
        REPLACE(@@SERVERNAME, N'\', N'$') + 
        N'.xel';


DECLARE @sql nvarchar(MAX) = N'
CREATE EVENT SESSION [DeadlockMonitor] ON SERVER 
    ADD EVENT sqlserver.xml_deadlock_report 
    ADD TARGET package0.' + (CASE WHEN @productVersion < 11 THEN N'asynchronous_file_target' ELSE N'event_file' END) + N'
    (
        SET
            FILENAME = N''' + REPLACE(@fullTargetPath, 'C:', 'E:') + ''',
            MAX_ROLLOVER_FILES = 0
    )
    WITH
    (
        EVENT_RETENTION_MODE = ALLOW_MULTIPLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 15 SECONDS,
        STARTUP_STATE = ON
    );

ALTER EVENT SESSION [DeadlockMonitor] ON SERVER
    STATE = START;'

EXEC(@sql);
运行上述脚本后,MyData目录中生成了一个文件

但是,我在web日志中看到了许多死锁错误,但是MyData目录中的文件仍然是空的

我做的不对

更多信息


我用同一个数据库在我的桌面开发机器上运行了上述代码,并且能够捕获死锁。

因为你说你在网上找到了这段代码,我怀疑

1.您可能没有正确使用path变量

2.如果这是您的全部代码,它将不起作用,因为产品版本需要使用case语句进行更精细的修改。由于您在2014年,我建议忽略这些case语句

我能够从您的代码中获得死锁,下面是仅修改路径并将产品版本设置为142017的结果


此外,您还可以从UI设置扩展事件。此外,默认系统运行状况日志在被覆盖之前包含一段时间内的死锁信息

谢谢您的提醒!我使用相同的数据库在我的桌面开发机器上运行了上述代码,并且能够捕获死锁。你能把修改过的密码寄出去吗?我想查看并使用它。我很久以前关闭了SSMS,更改将路径设置为某个路径'N'c:\somefolder\'。另外一个更改将@productversion设置为14,我的其余代码与您的代码相同