私は数ヶ月間、自分のデータベースで使用しているService Brokerキューインフラストラクチャを使用しています。 Initiator
キューが2百万レコードに達し、EndDialog
メッセージであることに気付きました。だから私はこのlinkのおかげでそれを再設計しました。SQL Server Service Broker - ドロップサービス
私の問題は、200万件のレコードを削除できなかったことです。私はこのlinkに示されているように以下のアプローチを使用し、クエリを実行したままにしました。私はそれをキャンセルするまで20時間実行しました。
declare @c uniqueidentifier
while(1=1)
begin
select top 1 @c = conversation_handle from dbo.queuename
if (@@ROWCOUNT = 0)
break
end conversation @c with cleanup
end
サービスとキューを削除しようとしていますが、もう一度時間がかかるようです。
drop service initiatorService
drop queue initiatorQueue
すぐに削除する別の方法はありますか?
データの例がありますか。それは現実的である必要はありませんが、あなたが削除しようとしている状態のデータの数行は素晴らしいでしょう。現時点では、コードがwhileループで効率的ではなく、SQLリソースを取り上げているので、時間がかかる理由がわかります。あなたの仕事が中止 –
@ CodeWarrior私は、ドロップサービスがメッセージのコードを後で削除していると思います。 1時間後、私はメッセージの半分が削除されているのを見ました。 'end conversation'を使う最初のコードブロックは私の状態では役に立たず、' waitfor receive ... 'を使うべきです。私は確信しています。サンプルデータを追加しました。 – ibubi
あなたは単純に '[table name] from message_type_name = 'http:// schemas.microsoft.com/sql.servicebroker/enddialog'の削除を試してみましたか? –