如何截断sys.conversation\u端点

jmp7cifd  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(205)

我们使用服务代理两个多月,突然发现系统的整体性能下降了。经过大量的挖掘和分析,我发现 page life expectancy 价格很低。然后在simplesqlserver的帮助下查看我的缓冲池,它填充了sys.sysdercv对象(5GB)。再找了一点,我发现 sys.conversation_endpoint 有1900万行10 gb的数据。我的错误是没有结束目标队列中的会话,但在结束双方(发起方和目标队列)中的会话后,它仍然保留在目标队列中 sys.conversation_endpoints cd状态(关闭)。删除这些行的一种方法是调用 end conversation with cleanup 但这需要很多时间才能完成。我写这份工作,但我想它需要超过7天才能完成。我的工作是:

DECLARE @BatchSize Int 

SELECT @BatchSize = 1000

declare @i int = @BatchSize;
declare @sum int = 0;
WHILE @i = @BatchSize BEGIN
    print concat('while ', @sum);

    select @i = 0;
    declare @handle uniqueidentifier
    declare conv cursor for select top (@BatchSize) conversation_handle from sys.conversation_endpoints
    open conv
    fetch NEXT FROM conv into @handle
    while @@FETCH_STATUS = 0
    Begin
        select @i = @i + 1;
        END Conversation @handle with cleanup
        fetch NEXT FROM conv into @handle
    End
    close conv
    deallocate conv 
    select @sum = @sum + @i;
END

所以,我的问题是:如何一次截断这个表及其数据。就像truncate命令一样 truncate table sys.conversation_endpoints ,此命令生成此错误:

Cannot find the object "conversation_endpoints" because it does not exist or you do not have permissions.

我想知道,有没有什么服务可以重新启动它,或者做什么事情来安全地删除大量的数据?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题