我在两台虚拟机上有两个集群SQL Server(2014年企业版)。在我的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
目录中的文件仍为空。
我做的不对吗?
更多信息
我在我的桌面(开发机器)上使用相同的数据库运行上面的SAME代码,我能够捕获死锁。