Как вы можете узнать, что заблокировал разговор Service Broker? - PullRequest
1 голос
/ 09 декабря 2011

У меня есть очередь сервисного брокера с одним диалогом, который ничем не обрабатывается.Однако, когда я запускаю, ничего не возвращается:

RECEIVE TOP(1000) * FROM dbo.QueueName

Однако, если я запускаю это:

SELECT COUNT(*) FROM dbo.QueueName

Я получаю цифру в тысячах.Цифра тоже не меняется.Я предполагаю, что в каком-то процессе группа разговоров заблокирована, но ничего с этим не делает.Как я могу узнать, так ли это, и как определить, какой SPID имеет блокировку?

1 Ответ

3 голосов
/ 09 декабря 2011

Если у вас есть доступ к системным представлениям, sys.dm_os_waiting_tasks и sys.dm_tran_locks должны найти вас, куда вам нужно идти. Первый тип - «что ждет мой процесс». Из этого вы можете узнать, какие SPID блокируют ваш запрос. Из этого списка SPID вы можете (если вам интересно) запросить представление блокировок, чтобы увидеть, какие блокировки они удерживают. Между прочим, я обнаружил, что один из методов allow_snapshot_isolation или read_committed_snapshot в базе данных помог в блокировке очереди в недавнем сражении.

...