Назад | Перейти на главную страницу

У меня есть блокирующая транзакция, но инструкция не отображается

Мой SQL Server 2008 начал зависать на простых запросах, поэтому я проверил блокирующие транзакции, используя встроенный отчет «Все блокирующие транзакции». Конечно, такая сделка существует. Однако, если я разверну «Блокирующий оператор SQL», я получаю пустое поле. Как я могу узнать больше о проблеме?

Эта транзакция блокирует несколько критически важных для бизнеса заданий (ну, не совсем так, но босс и босс зависят от них), поэтому я неохотно KILLотредактировал сеанс блокировки. Спустя 20 минут процесс отката все еще продолжается ... завершение: 0% ... оставшееся время: 0 секунд. Очень хотелось бы знать, в чем причина, у меня уже несколько месяцев не было ни одного заметного блока.

На какой версии SQL вы работаете? Если 2005 г. и выше, попытаться определить вызывающий нарушение запрос с помощью приведенного ниже сценария? [Отказ от ответственности: я не являюсь первоначальным автором сценария; Некоторое время он был у меня в библиотеке, но я не мог должным образом поверить в автора, так как не мог вспомнить, где я его взял]

SELECT
db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO

попробуйте с sp_who2
Вы можете наблюдать за тем, что происходит с вашим БД