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