Поставьте в очередь каждую строку в очереди ssb из большой таблицы - PullRequest
1 голос
/ 25 ноября 2010

У меня есть таблица, которая содержит 2,5 миллиона строк, каждая строка имеет один столбец типа 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

Есть ли более быстрые способы решения этой проблемы?

Кстати, прежде чем кто-то спросит: нам нужно начать с таблицы, потому что она заполнена выводом из ранее рассчитанного оператора слияния

1 Ответ

0 голосов
/ 26 ноября 2010

Итак, ваша проблема с производительностью связана с отправляющей, а не принимающей стороной, верно?(это немного неясно из вашего вопроса).В этом случае вам нужно начать с попытки:

  1. Пакетное выполнение множества операций за одну транзакцию.Скорее всего, вас больше всего поражают синхронные сбросы журналов во время фиксации.
  2. Попробуйте обработать таблицу более эффективно (например, выделите больше строк одновременно во временную таблицу, а затем используйте курсоры для итерации по ней и отправкисообщения)

Если у вас возникли проблемы на приемной стороне, взгляните на эту замечательную статью Remus .

...