Назад | Перейти на главную страницу

Очередь инициатора компонента Service Broker MSSQL 2008R2 заполнена старыми разговорами

Моя очередь инициатора заполнена примерно 18 миллионами старых сообщений EndDialog или Error message_type_name.

По-видимому, образец кода Microsoft, который я использовал для настройки внутренней активации (http://msdn.microsoft.com/en-us/library/cc281517.aspx) не содержит шага для завершения диалога на стороне инициатора (я читал, что это называется «выстрелил и забыл»).

Мне интересно, потому что мои sysdercv и другие таблицы, связанные с сервисным брокером, теперь имеют двузначные гигабайты: как я могу избавиться от этих старых сообщений?

Я пытался запустить END CONVERSATION на нескольких тысячах, но я не вижу изменений в размере в этих системных таблицах.

Кроме того, как я могу изменить службу / очередь инициатора на автоматический EndDialog в будущем?

Изменить: я должен упомянуть, что, несмотря на то, что через конвейер проходит все больше и больше сообщений, я не видел, чтобы ни одна из этих системных таблиц меняла размер как минимум за полчаса.

Фактически, упомянутый вами учебник действительно вызывает КОНВЕРСАЦИЮ с обеих сторон. Следовательно, он не страдает от паттерна «выстрелил и забыл». Однако первая END CONVERSATION (сторона инициатора) запускается вручную из окна запроса, что не очень практично. В производстве вы, вероятно, захотите иметь активированную процедуру на обоих концах - один на стороне инициатора получит ответ от цели и завершит разговор (то есть, если вы хотите сохранить схему обмена сообщениями из учебника) .