2010-11-25 50 views
1

我有一個包含250萬行的表,每行有一列xml類型。當消息到達另一個隊列(觸發隊列)時,所有記錄應該被刪除並排入sqlserver服務代理隊列。性能非常重要,現在速度太慢。什麼是實現這一目標的最佳方式?從一個大表排隊每個行在一個ssb隊列中

目前我們使用激活的SP上確實在一段時間(@message <> NULL)循環的triggerqueue:

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

是有決心解決這個問題,更快的方式?

順便說一句:有人問前:我們需要從表開始,因爲它充滿了從早期計算合併語句的輸出

回答

0

所以你的性能問題是在發送端而不是接收端, 對? (你的問題有點不清楚)。在這種情況下,您需要從嘗試開始:

  1. 在單個事務中批量處理多個操作。在提交時,您最有可能通過同步日誌刷新獲得最大的收益。
  2. 嘗試更有效地處理表(例如同時選擇多行插入到臨時表中,然後使用遊標來遍歷它和發送信息)

如果您遇到接收端的問題,看看這個great article by Remus

相關問題