代码之家  ›  专栏  ›  技术社区  ›  Tim Mahy

将一个大表中的ssb队列中的每一行排队

  •  1
  • Tim Mahy  · 技术社区  · 14 年前

    我有一个包含250万行的表,每行有一列xml类型。当消息到达另一个队列(triggerqueue)时,应删除所有记录并将其放入sqlserver service broker队列中。表演很重要,现在太慢了。实现这一目标的最佳方法是什么?

    目前,我们在triggerqueue上使用一个激活的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
    

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

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

    1 回复  |  直到 13 年前
        1
  •  0
  •   Pawel Marciniak    14 年前

    你的问题是发送而不是接收对吗?(你的问题有点不清楚)。在这种情况下,你会想:

    1. 在单个事务中批处理多个操作。在提交时,同步日志刷新对您的影响最大。

    如果你在接收端遇到问题,看看这个 great article by Remus .