Как определить тупик в SQL Azure? - PullRequest
9 голосов
/ 03 ноября 2011

У меня есть роль Windows Azure, которая состоит из двух экземпляров. Время от времени транзакция завершается с SqlException со следующим текстом

Транзакция (идентификатор процесса N) заблокирована для ресурсов блокировки другого процесса и выбрана в качестве жертвы тупика. Перезапустите транзакцию.

Теперь я некоторое время гуглю и читаю этот пост об определении взаимоблокировок с помощью журналов SQL Server.

Проблема в том ...

Как мне это сделать в SQL Azure? Какие инструменты я использую для доступа к внутренним компонентам SQL Azure и получения достаточного количества данных?

Ответы [ 3 ]

4 голосов
/ 03 ноября 2011

Мониторинг SQL Azure более ограничен, чем SQL Server, но инструменты становятся все более доступными для просмотра:

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

2 голосов
/ 03 марта 2016

Выполните следующий запрос к базе данных «Master» в базе данных 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('dl', NULL, NULL, NULL)
WHERE object_name = 'database_xml_deadlock_report'

Второй запрос содержит данные в формате XML, относящиеся к выполняемым процессам. Удачи!

1 голос
/ 24 июня 2016

Теперь база данных SQL Azure поддерживает два способа получения тупиковых отчетов xml. Вы можете создать сеанс XE в db-области с событием database_xml_deadlock_report, чтобы отслеживать их самостоятельно, или вы можете изменить вызов sys.fn_xe_telemetry_blob_target_read_file из предыдущего ответа, чтобы использовать 'dl' вместо 'el'. Тупики теперь перенаправляются в собственный файл, а не смешиваются с событиями входа в систему.

Эта статья MSDN содержит самую свежую информацию.

...