12

我有一个由两个实例组成的 Windows Azure 角色。有时,事务将失败并SqlException显示以下文本

事务(进程 ID N)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务。

现在我在 Google 上搜索了一段时间,并阅读了这篇关于使用 SQL Server 日志识别死锁的文章。

问题是...

如何在 SQL Azure 中执行此操作?我使用什么工具来访问 SQL Azure 的内部并获取足够的数据?

4

3 回答 3

5

SQL Azure 的监控比 SQL Server 更受限制,但这些工具正变得越来越方便您查看下面的内容:

http://social.technet.microsoft.com/wiki/contents/articles/troubleshoot-and-optimize-queries-with-sql-azure.aspx

于 2011-11-03T18:41:10.700 回答
5

在 SQL Azure db 中的“主”数据库上运行以下查询,

select * from sys.event_log where event_type='deadlock' and database_name='<Databasename>';

此查询存在性能问题,如果超时,请尝试以下操作,

SELECT *
,CAST(event_data AS XML).value('(/event/@timestamp)[1]', 'datetime2') AS TIMESTAMP
, CAST(event_data AS XML).value('(/event/data[@name="error"]/value)[1]', 'INT') AS error
,CAST(event_data AS XML).value('(/event/data[@name="state"]/value)[1]', 'INT') AS STATE
,CAST(event_data AS XML).value('(/event/data[@name="is_success"]/value)[1]', 'bit') AS is_success
,CAST(event_data AS XML).value('(/event/data[@name="database_name"]/value)[1]', 'sysname') AS database_name
FROM sys.fn_xe_telemetry_blob_target_read_file('dl', NULL, NULL, NULL)
WHERE object_name = 'database_xml_deadlock_report'

第二个查询具有与正在执行的进程相关的 XML 格式的数据。祝你好运!

于 2016-03-03T03:46:04.320 回答
2

现在 Azure SQL 数据库支持两种获取死锁 xml 报告的方法。您可以使用 database_xml_deadlock_report 事件创建一个 db 范围的 XE 会话来自己跟踪它们,或者您可以修改之前答案中的 sys.fn_xe_telemetry_blob_target_read_file 调用以使用“dl”而不是“el”。死锁现在被路由到它们自己的文件,而不是与登录事件混在一起。

MSDN 文章包含最新信息。

于 2016-06-24T16:58:30.780 回答