我一直在运行一个涉及Service Broker队列的负载测试。由于出了问题,队列中最终出现了130万条消息。我只想清除这些,不需要备份,也不需要日志记录。问题是,当我试图删除队列时,它需要半个小时,然后日志文件填满,整个事情回滚。是否有一种快速而肮脏的方法来清除队列中的所有内容?
您可以使用以下语句一次清除所有对话:
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
如果在RECEIVE语句中省略TOP 1子句,那么它将接收符合标准的所有消息,或者将其设置为一个高的数字将允许您在可管理的块中清除积压。
诀窍是对消息进行"黑洞"处理,这样结果集就不会返回给客户端。