Как определить взаимоблокировку в SQL Azure?
У меня есть роль Windows Azure, которая состоит из двух экземпляров. Когда сделка завершится SqlException
с текстом
транзакция (идентификатор процесса N) был взаимно блокировки ресурсов с другим процессом и была выбрана в качестве жертвы взаимоблокировки. Повторите транзакцию.
теперь я некоторое время гуглил и читал этот пост об идентификации блокировок с помощью журналов SQL Server.
проблема есть...
Как это сделать в SQL Azure? Какие инструменты я использую для доступа к внутренним ресурсам SQL Azure и получения достаточного количества данных?
3 ответов
мониторинг SQL Azure более ограничен, чем SQL Server, но инструменты становятся более доступными для вас, чтобы посмотреть ниже:
выполните следующий запрос в базе данных "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 последней информации.