Как очистить sys.conversation_endpoints - PullRequest
1 голос
/ 12 октября 2009

У меня есть таблица, триггер на столе реализован с помощью сервисного брокера. Ежедневно в таблицу вставляется более полумиллиона записей.

Асинхронный SP используется для проверки состояния сверала с помощью вставленных данных и обновления других таблиц. Он работал нормально в течение последнего 1 месяца, и SP запускался через 2-3 секунды после вставки записи. Но сейчас это займет более 90 минут.

В настоящее время в sys.conversation_endpoints слишком много записей.

(Обратите внимание, что все таблицы обрезаются ежедневно, поскольку мне не нужны эти записи на следующий день)

Другие операции с базами данных являются нормальными (в среднем 60% загрузки ЦП).

Теперь, где мне нужно посмотреть ??

Я могу без проблем создать базу данных, но не думаю, что это хороший способ решить проблему

Ответы [ 2 ]

2 голосов
/ 27 ноября 2009

вы можете 'завершить разговор @ handle' или 'завершить разговор @ handle with cleanup'

0 голосов
/ 05 июня 2019

Скрипт для завершения всех разговоров для определенного сервиса:

DECLARE @sql NVARCHAR(MAX)
       ,@far_service NVARCHAR(256) = N'far_service_name';

WHILE EXISTS (
                 SELECT COUNT(*)
                 FROM   sys.conversation_endpoints
                 WHERE  far_service = @far_service
             )
BEGIN
    SET @sql = N'';
    SELECT TOP 1000 @sql = @sql + N'END CONVERSATION ''' + CAST(conversation_handle AS NVARCHAR(50)) + N''' WITH CLEANUP;
'
    FROM   sys.conversation_endpoints
    WHERE  far_service = @far_service;

    --PRINT @sql;
    EXEC sys.sp_executesql @stmt = @sql;

    --RETURN;
END;
GO
...