我有一个由两个实例组成的 Windows Azure 角色。有时,事务将失败并SqlException
显示以下文本
事务(进程 ID N)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务。
现在我在 Google 上搜索了一段时间,并阅读了这篇关于使用 SQL Server 日志识别死锁的文章。
问题是...
如何在 SQL Azure 中执行此操作?我使用什么工具来访问 SQL Azure 的内部并获取足够的数据?
我有一个由两个实例组成的 Windows Azure 角色。有时,事务将失败并SqlException
显示以下文本
事务(进程 ID N)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务。
现在我在 Google 上搜索了一段时间,并阅读了这篇关于使用 SQL Server 日志识别死锁的文章。
问题是...
如何在 SQL Azure 中执行此操作?我使用什么工具来访问 SQL Azure 的内部并获取足够的数据?
SQL Azure 的监控比 SQL Server 更受限制,但这些工具正变得越来越方便您查看下面的内容:
在 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 格式的数据。祝你好运!
现在 Azure SQL 数据库支持两种获取死锁 xml 报告的方法。您可以使用 database_xml_deadlock_report 事件创建一个 db 范围的 XE 会话来自己跟踪它们,或者您可以修改之前答案中的 sys.fn_xe_telemetry_blob_target_read_file 调用以使用“dl”而不是“el”。死锁现在被路由到它们自己的文件,而不是与登录事件混在一起。
此MSDN 文章包含最新信息。