【发布时间】:2011-11-08 10:59:02
【问题描述】:
我一直在运行一个涉及 Service Broker 队列的负载测试。出了点问题,队列中包含 130 万条消息。我只想清除这些,不需要备份,也不需要记录。麻烦的是,当我尝试删除队列时,它需要半个小时,然后日志文件就会填满,整个事情都会回滚。有没有一种快速而肮脏的方法可以将所有内容从队列中清除?
【问题讨论】:
标签: sql-server sql-server-2008-r2 service-broker
我一直在运行一个涉及 Service Broker 队列的负载测试。出了点问题,队列中包含 130 万条消息。我只想清除这些,不需要备份,也不需要记录。麻烦的是,当我尝试删除队列时,它需要半个小时,然后日志文件就会填满,整个事情都会回滚。有没有一种快速而肮脏的方法可以将所有内容从队列中清除?
【问题讨论】:
标签: sql-server sql-server-2008-r2 service-broker
您可以使用以下语句一次清除所有对话:
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 子句,那么它将接收所有符合条件的消息,或者将其设置为较高的数字将允许您清除可管理块中的积压。
诀窍是“黑洞”消息,因此结果集不会返回给客户端。
【讨论】: