从大表中排队ssb队列中的每一行

时间:2010-11-25 17:34:44

标签: sql-server-2008 service batch-file service-broker

我有一个包含250万行的表,每行有一列xml类型。当消息到达另一个队列(triggerqueue)时,应删除所有记录并在sqlserver服务代理队列中排队。性能非常重要,现在它太慢了。实现这一目标的最佳方法是什么?

目前我们在触发器上使用了一个激活的sp,它会在一段时间内完成(@message<> null)循环:

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

有更快的方法来解决这个问题吗?

顺便说一句:在有人问:我们需要从表开始,因为它填充了先前计算的合并语句的输出

1 个答案:

答案 0 :(得分:0)

所以你的性能问题出在发送端而不是接收端,对吧? (你的问题有点不清楚)。在这种情况下,您将首先尝试:

  1. 在单个事务中批量处理多个操作。您最有可能在提交时通过同步日志刷新获得最多的打击。
  2. 尝试更有效地处理表格(例如,一次在临时表中选择更多行,然后使用游标迭代它并发送消息)
  3. 如果您在接收方遇到问题,请查看此great article by Remus