SignalR SQL Server代理 - 孤立的Service Broker队列错误

时间:2016-03-03 18:29:40

标签: sql-server sql-server-2008 signalr service-broker signalr-backplane

我在SQL Server 2008上使用SQL Server Broker进行Scaleout和SignalR v2.1.2。最近发现我们在DB日志中每天产生50k +错误。经过一些研究,从12月起有3个孤立的Service Broker队列。错误示例:

2016-02-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显然已按预期下降。 DB将每5秒产生一次错误(相当于每天50k,有3个队列)。每个队列都包含一条消息。

问题:

这会导致什么?

是否可以实施其他SignalR设置以确保清理这些设置?

这是SQL Server Service Broker中的错误吗?

是否有一份文件描述了SignalR关于队列及其过期的预期行为?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

这些是SqlDependency的遗留物。 SqlDependency.Start()的实现是创建一个即时服务,队列和激活过程(参见reference source)。这有一些issues,甚至一个简单的Visual Studio debugging会话也可以留下搁浅的队列/激活程序。

您可以在发生这些剩余服务/队列/过程时将其清理干净,或者您可以选择使用较低级别的SqlNotificationRequest类并自行处理服务/队列部署。选择你的毒药。