2010-11-25 101 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

相关问题