有人知道如何识别AWS RDS上的SQL Server死锁吗?我尝试
dbcc traceon(1222,-1)
但是我没有必要的权限; AWS监控页面没有死锁信息。
答案 0 :(得分:1)
我也在努力在AWS内进行监控以显示僵局。但是,我可以向您展示如何启用traceflag 1222。This blog post on SQLTips涵盖了几乎所有想要使用参数组的需求。如果您仅打算使用PowerShell,它将涵盖所有内容。使用这些方法之一启用它,您将在日志中看到错误。
在创建启用了1222的自定义参数组后,您需要做的另一件事是将该组与数据库实例相关联。选择实例,然后选择修改。向下滚动以找到“参数和设置”部分。按照上面的说明选择您定义的组。
我将继续寻找一种方法来直接在监视器页面上查看死锁。暗示它们应该在那儿,因为您可以致电柜台。但是,我无法生成任何值。
更新: 我正在继续研究。您可以查询system_health扩展事件会话。即使扩展事件在AWS RDS中不可用,但system_health仍然存在。此查询有效:
WITH fxd
AS (SELECT CAST(fx.event_data AS XML) AS Event_Data
FROM sys.fn_xe_file_target_read_file(N'system_health*.xel', NULL, NULL, NULL) AS fx )
SELECT dl.deadlockgraph
FROM
(
SELECT dl.query('.') AS deadlockgraph
FROM fxd
CROSS APPLY event_data.nodes('(/event/data/value/deadlock)') AS d(dl)
) AS dl;
答案 1 :(得分:0)
您应该能够在Azure数据库上运行它:
SELECT *
FROM sys.event_log
WHERE event_type = 'deadlock';
WITH CTE
AS (SELECT CAST(event_data AS XML) AS [target_data_XML]
FROM sys.fn_xe_telemetry_blob_target_read_file('dl', NULL, NULL, NULL) )
SELECT target_data_XML.value('(/event/@timestamp)[1]', 'DateTime2') AS Timestamp,
target_data_XML.query('/event/data[@name=''xml_report'']/value/deadlock') AS deadlock_xml,
target_data_XML.query('/event/data[@name=''database_name'']/value').value('(/value)[1]', 'nvarchar(100)') AS db_name
FROM CTE;