Как определить взаимоблокировку в SQL Azure?

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

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

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

проблема есть...

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

3 ответов


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

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


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

оба этих запроса имеют подробные данные в формате XML, относящиеся к выполняемым процессам. Удачи!


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

этой статья MSDN последней информации.