Это покажет все базы данных с удерживаемыми эксклюзивными блокировками (которые могут включать временные блокировки, удерживаемые во время выполнения), используя sys.dm_tran_locks
DMV:
select d.*, l.* from sys.dm_tran_locks l
join sys.databases d on l.resource_database_id = d.database_id
where l.request_mode = 'X'
(X = исключительный, S = общий, IS = намеренный общий) См. Режимы блокировки .
Но, вероятно, лучший способ - включить флаги трассировки 1204 и 1222:
Флаг трассировки 1204 и флаг трассировки 1222 При возникновении взаимоблокировок флаг трассировки 1204 и флаг трассировки 1222 возвращают информацию, записанную в журнале ошибок SQL Server 2005.Флаг 1204 трассировки сообщает информацию о взаимоблокировке, отформатированную каждым узлом, участвующим в взаимоблокировке.Флаг трассировки 1222 форматирует информацию о взаимоблокировке сначала по процессам, а затем по ресурсам.Можно включить оба флага трассировки для получения двух представлений одного и того же события взаимоблокировки.
Ссылка: Обнаружение и окончание взаимоблокировки
Кроме того, выполните команду sp_who2
и найдите записи в столбце BlkBy
(заблокировано);следуйте им, пока не доберетесь до головы тупиковой цепи.За это отвечает идентификатор процесса (или PID).
Чтобы узнать, что sql работает за конкретным процессом, вы можете запустить:
dbcc inputbuffer (@pid)
и использовать этот PID для уничтожения процесса (с помощьюблагоразумие и на свой страх и риск):
kill @pid
Проверить Кто активен?v10.00: Мониторинг DMV стал проще
Также читайте Блокировка не является взаимоблокировкой (чтобы различать два сценария)