[英]SQL Server Service Broker - Drop service
我有幾個月來一直在我的數據庫中使用的 Service Broker 隊列基礎結構。 我意識到我的Initiator
隊列已達到 200 萬條記錄,這些記錄是EndDialog
消息。 所以我通過這個鏈接重新設計了它。
我的問題是我無法刪除那 200 萬條記錄。 我使用了此鏈接中所示的以下方法,並讓查詢繼續執行。 它執行了 20 個小時,直到我取消它。
declare @c uniqueidentifier
while(1=1)
begin
select top 1 @c = conversation_handle from dbo.queuename
if (@@ROWCOUNT = 0)
break
end conversation @c with cleanup
end
現在我正在嘗試刪除 Service 和 Queue,但它似乎又會花費很多時間。
drop service initiatorService
drop queue initiatorQueue
還有其他方法可以立即刪除嗎?
除非您願意,否則沒有捷徑可以實現您所知道的目標。
ALTER DATABASE ... SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
中的Remus的建議進行操作) 至於您的代碼,我建議您使用receive
而不是select
; 否則,您可能會多次獲得相同的對話框。 另外,如果EndDialog
消息出現在隊列中,您可能希望將它們與其他消息區分開。
我有一個類似的問題,刪除服務花了很長時間。 這么久我的 SQL 服務器用完了 memory 並崩潰了。 我首先嘗試用您在頂部發布的查詢結束對話,但這沒有幫助。 在我的例子中,創建了很多從未關閉的對話。 所以雖然隊列是空的,但是當我查詢 sys.conversation_endpoints 時仍然有很多對話。 我使用以下腳本來清理對話,然后我能夠立即將其刪除。
請注意,下面的查詢將關閉所有對話,無論隊列如何,因此如果您只想刪除特定的對話,則需要進行過濾
declare @c uniqueidentifier
while(1=1)
begin
select top 1 @c = conversation_handle from sys.conversation_endpoints
if (@@ROWCOUNT = 0)
break
end conversation @c with cleanup
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.