1

启用服务器代理 sql 通知后。我的 sql 内存变为 2 GB。

我怎样才能杀死队列?如何释放通知表之一?

下面的查询“sysdercv”表很大。

select OBJECT_NAME(p.object_id),
 reservedpages = sum(a.total_pages),
    usedpages = sum(a.used_pages),
    pages = sum(
            CASE
                -- XML-Index and FT-Index internal tables are not considered "data", but is part of "index_size"
                When it.internal_type IN (202,204,211,212,213,214,215,216) Then 0
                When a.type <> 1 Then a.used_pages
                When p.index_id < 2 Then a.data_pages
                Else 0
            END
        )
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
    left join sys.internal_tables it on p.object_id = it.object_id
GROUP BY p.object_id
with rollup

如何释放并终止所有服务代理通知?我也想禁用通知。但是要先杀掉桌子上面放出来。

4

1 回答 1

3

终于完成了清理对话。

SET NOCOUNT OFF;
DECLARE @handle UniqueIdentifier
DECLARE @count INT =0

DECLARE handleCursor CURSOR
FOR 
SELECT TOP 1000 [conversation_handle]
FROM sys.conversation_endpoints with(nolock)
WHERE [state] = 'co'
AND far_service = 'ChangeNotifications' 
AND security_timestamp < '2013-01-01'

DECLARE @Rows INT
SELECT @Rows = COUNT(*) FROM sys.conversation_endpoints with(nolock)
WHERE [state] = 'co'
AND far_service = 'ChangeNotifications'

WHILE @ROWS>0
BEGIN
    OPEN handleCursor

    FETCH NEXT FROM handleCursor 
    INTO @handle

    BEGIN TRANSACTION

    WHILE @@FETCH_STATUS = 0
    BEGIN

        END CONVERSATION @handle WITH CLEANUP

        FETCH NEXT FROM handleCursor INTO @handle
        SET @count= @count+1
    END

    COMMIT TRANSACTION
    print @count

    CLOSE handleCursor;

    IF @count > 100000
    BEGIN
        BREAK;
    END

    SELECT @Rows = COUNT(*) FROM sys.conversation_endpoints with(nolock)
    WHERE [state] = 'co'
    AND far_service = 'ChangeNotifications'
END
DEALLOCATE handleCursor;
于 2013-06-03T07:12:14.240 回答