8

我有一個由兩個實例組成的Windows Azure角色。在一段時間後交易將失敗,並SqlException用以下文本如何識別SQL Azure中的死鎖?

事務(進程ID N)已被死鎖的鎖資源與另一個進程,並已被選作死鎖犧牲品。重新運行交易。

現在我GOOGLE了一段時間,閱讀this post有關識別使用SQL Server日誌死鎖。

問題是...

如何在SQL Azure中執行此操作?我使用什麼工具訪問SQL Azure的內部並獲取足夠的數據? SQL Azure中的

+0

如果您在這裏找不到和可以接受的答案,請不要猶豫直接與Microsoft聯繫。微軟向Azure傾注了大量資源,並且自從Guthrie接任後,他們給予Azure開發人員的支持令人印象深刻。如果失敗了,我會密切注意這個線程,並指導我知道回答這個線程的Azure MVP,因爲我想自己知道答案。 – JSWork

回答

2

運行在SQL Azure中數據庫的「主」數據庫以下查詢,

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('el', NULL, NULL, NULL) 
WHERE object_name = 'database_xml_deadlock_report' 

這兩個查詢都有與正在執行的進程相關的XML格式的詳細數據。祝你好運!

+0

我不認爲這些查詢都在v12中工作。對我來說,sys.event_log的第一個查詢返回行,但沒有XML。在同一數據庫上,第二個查詢不返回任何行。 – yowl00

0

現在,Azure SQL數據庫支持兩種獲取死鎖xml報告的方式。您可以使用database_xml_deadlock_report事件創建一個數據庫範圍的XE會話來自己跟蹤它們,或者您可以修改先前答案中的sys.fn_xe_telemetry_blob_target_read_file調用,以使用'dl'而不是'el'。死鎖現在被路由到他們自己的文件,而不是與登錄事件混合在一起。

這個MSDN article有最新信息。