【问题标题】:Is there a quick way of dropping a Service Broker queue是否有快速删除 Service Broker 队列的方法
【发布时间】:2011-11-08 10:59:02
【问题描述】:

我一直在运行一个涉及 Service Broker 队列的负载测试。出了点问题,队列中包含 130 万条消息。我只想清除这些,不需要备份,也不需要记录。麻烦的是,当我尝试删除队列时,它需要半个小时,然后日志文件就会填满,整个事情都会回滚。有没有一种快速而肮脏的方法可以将所有内容从队列中清除?

【问题讨论】:

    标签: sql-server sql-server-2008-r2 service-broker


    【解决方案1】:

    您可以使用以下语句一次清除所有对话:

    declare @conversationHandle uniqueidentifier 
    select top 1 @conversationHandle = conversation_handle from sys.conversation_endpoints    
    while @@rowcount = 1
    
    begin    
         end conversation @conversationHandle with cleanup    
         select top 1 @conversationHandle = conversation_handle from sys.conversation_endpoints    
    end
    

    【讨论】:

    • 我确信这对我有用 +1。但是有一个问题:您在一次对话中拥有所有消息的情况。在这种情况下,在单个对话被清除之前,它可能仍然会用完日志空间。
    【解决方案2】:

    如果您在 RECEIVE 语句中省略 TOP 1 子句,那么它将接收所有符合条件的消息,或者将其设置为较高的数字将允许您清除可管理块中的积压。

    诀窍是“黑洞”消息,因此结果集不会返回给客户端。

    【讨论】:

    • 虽然这是我找到的最佳答案,但仍然没有我想要的那么快。问题是 RECEIVE 语句一次只能获得一个对话,而不管您将 TOP n 子句设为多大。
    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多