Есть ли быстрый способ отбросить очередь компонента Service Broker? - PullRequest
3 голосов
/ 08 ноября 2011

Я провел нагрузочный тест, который включал очередь компонента Service Broker в течение ночи. Что-то пошло не так, и очередь закончилась 1,3 миллионами сообщений. Я просто хочу очистить их, без резервного копирования и регистрации не требуется. Беда в том, что когда я пытаюсь отбросить очередь, это занимает полчаса, а затем файл журнала заполняется, и все возвращается назад. Есть ли быстрый и грязный способ выбросить все из очереди?

Ответы [ 2 ]

6 голосов
/ 03 января 2012

Вы можете очистить все разговоры одновременно с помощью следующего оператора:

declare @conversationHandle uniqueidentifier 
select top 1 @conversationHandle = conversation_handle from sys.conversation_endpoints    
while @@rowcount = 1

begin    
     end conversation @conversationHandle with cleanup    
     select top 1 @conversationHandle = conversation_handle from sys.conversation_endpoints    
end
2 голосов
/ 08 ноября 2011

Если вы опустите предложение TOP 1 в операторе RECEIVE, то оно получит все сообщения, которые соответствуют критериям, или установив его на большое число, вы сможете очистить очередь в управляемых фрагментах.

Хитрость заключается в «черной дыре» сообщений, поэтому набор результатов не возвращается клиенту.

...