2011-11-08 33 views
3

夜間にService Brokerキューを含む負荷テストを実行していました。何かがうまくいかず、キューに130万のメッセージが入りました。私はちょうどこれらをクリアし、バックアップもログも必要ない。問題は、キューを削除しようとすると30分かかり、その後ログファイルがいっぱいになり、全体がロールバックされるということです。待ち行列からすべてを洗い流す、すばやく汚れた方法はありますか?Service Brokerキューをすばやく削除する方法がありますか

答えて

2

RECEIVEステートメントでTOP 1句を省略すると、条件を満たすすべてのメッセージが受信されます。または、高い数値に設定すると、管理可能なチャンク内のバックログをクリアできます。

トリックはメッセージを「ブラックホール」して、結果セットがクライアントに返されないようにします。

+3

これは私が見つけた最良の答えですが、まだ私が望むほど迅速ではありません。問題は、RECEIVEステートメントは、TOP n句をどれだけ大きくしても、一度に1つの会話しか得られないということです。 –

6

あなたは、次の文を使用して一度にすべての会話をクリアすることができます。

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 
+0

これは私のために働いたと確信しています+1。しかし、1つの会話にすべてのメッセージが含まれているという状況があります。その場合、1つの会話がクリアされる前にログスペースが不足する可能性があります。 –

関連する問題