1

我正在SQL Server 2008上使用SQL Server代理與SignalR v2.1.2進行擴展。最近發現我們在數據庫日誌中每天產生50k +錯誤。經過一番研究,從12月起,有3個孤立的Service Broker隊列。錯誤例如:SignalR SQL Server代理 - 孤立的服務代理隊列錯誤

2016年2月27日23:58:01.79 spid30s活化PROC '[DBO] [SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0]。' 上運行隊列「MY_SIGNALR_DB.dbo.SqlQueryNotificationService- 2ffbddba-6ddc-4ad0-88b4-45a405e975e0'輸出以下內容:'找不到存儲過程'dbo.SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0'。'

這些隊列是在12月份創建的,因爲某些原因沒有被丟棄。如預期的那樣,相應的SP顯然下降了。數據庫每5秒鐘會產生一次錯誤(相當於每天有3個隊列的50k)。每個隊列都包含一條消息。

問題:

什麼能導致這種情況?

是否有額外的SignalR設置可以執行以確保這些清理?

這是SQL Server Service Broker中的錯誤嗎?

是否有一個文檔描述了SignalR在隊列及其過期方面的預期行爲?

謝謝你的時間。

回答

1

這些是從SqlDependency剩餘的。 SqlDependency.Start()的實現是創建一個即時服務,隊列和激活的過程(請參見reference source)。這有一些issues,甚至一個簡單的Visual Studio debugging會話可能會留下擱淺的隊列/激活的過程。

您可以隨時清理這些剩餘的服務/隊列/過程,也可以選擇使用較低級別的SqlNotificationRequest類,並自行處理服務/隊列部署。選擇你的毒藥。