【问题标题】:Enqueue each row in a ssb queue from a large table将大表中的 ssb 队列中的每一行排入队列
【发布时间】:2010-11-25 17:34:44
【问题描述】:

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

目前我们在触发器队列上使用一个激活的 sp,它在 while(@message null) 循环中执行:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 在单个事务中批处理许多操作。您最有可能在提交时受到同步日志刷新的影响。
    2. 尝试更有效地处理表(例如,一次在临时表中选择更多行,然后使用游标对其进行迭代并发送消息)

    如果您在接收端遇到问题,请查看great article by Remus

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多