我一直在运行一个涉及Service Broker队列的负载测试。出了点问题,队列最终收到了130万条消息。我只想清除这些,没有备份,也不需要记录。麻烦的是,当我尝试删除队列时,它花了半个小时,然后日志文件填满,整个事情回滚。是否有一种快速而肮脏的方式将所有东西都冲出队列?
答案 0 :(得分:6)
您可以使用以下语句一次清除所有会话:
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子句,则它将接收符合条件的所有消息,或者将其设置为较大的数字将允许您清除可管理块中的积压。
诀窍是“黑洞”消息,因此结果集不会返回给客户端。