2010-11-25 7 views
1

私はテーブルが250万行含まれています。各行にはxml型の列が1つあります。メッセージが別のキュー(トリガキュー)に到着すると、すべてのレコードを削除してsqlserverサービスブローカキューに格納する必要があります。パフォーマンスは非常に重要で、今は遅すぎます。これを達成する最良の方法は何でしょうか?大きなテーブルからssbキューの各行をエンキューします

begin transaction 
delete top (1) from table output @tempTable 
select top 1 @message = message from @tempTable 
send on conversation @message 
commit transaction 

は、この問題に取り組むためのより高速な方法があります:

は、現在、我々は(@message <>ヌル)whileループにしtriggerqueue上で活性化SPを使うのか?ところで

:誰かが尋ねる前に:それは、以前の計算MERGE文からの出力で満たされているので、我々は、テーブルから起動する必要が

答えて

0

だからあなたのパフォーマンスの問題は、送信側にあるのではなく受信側、 右? (あなたの質問からは少し不明です)。この場合、まず試してみることをお勧めします。

  1. 1回のトランザクションで多数の操作をバッチします。コミット時に同期ログフラッシュによって最大の打撃を受ける可能性が最も高いです。
  2. あなたが受信側で問題が発生している場合は、

(例えば一時テーブルに一度に複数の行を選択し、それを反復処理すると、メッセージを送信するためにカーソルを使用)、より効率的にテーブルを処理して試してみてくださいこのgreat article by Remusをご覧ください。

関連する問題