识别AWS RDS上的SQL Server死锁

时间:2019-11-08 10:03:57

标签: sql-server rds

有人知道如何识别AWS RDS上的SQL Server死锁吗?我尝试

dbcc traceon(1222,-1)

但是我没有必要的权限; AWS监控页面没有死锁信息。

2 个答案:

答案 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;