我在SQL Server2008上使用SQL Server Broker与SignalR v2.1.2进行横向扩展。最近发现,我们每天都会在数据库日志中产生50k+错误。经过一些研究,从12月份开始,有3个孤立的Service Broker队列。错误示例:
2016-02-27 23:58:01.79找不到在队列'MY_SIGNALR_DB.dbo.SqlQueryNotificationService-2ffbddba-6ddc-4ad0-88b4-45a405e975e0‘上运行的激活的proc 'dbo.SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0’输出如下:‘找不到存储过程'dbo.SqlQueryNotificationStoredProcedure-2ffbddba-6ddc-4ad0-88b4-45a405e975e0'.’
这些队列是在12月份创建的,由于某种原因没有被删除。相应的SP显然如预期的那样被删除。为此,数据库将每5秒产生一个错误(相当于每天50k,具有3个队列)。每个队列都包含一条消息。
问题:
是什么导致了这种情况?
是否可以实施其他SignalR设置以确保清理这些设置?
这是SQL Server Service Broker中的错误吗?
是否有文档描述SignalR关于队列及其过期的预期行为?
谢谢您抽时间见我。
发布于 2016-03-04 16:20:39
这些是SqlDependency遗留下来的。SqlDependency.Start()的实现是创建即时服务、队列和激活过程(参见reference source)。这有一些issues,甚至一个简单的Visual Studio debugging会话也会留下搁浅的队列/激活的过程。
您可以在发生时清理这些遗留的服务/队列/过程,也可以选择使用较低级别的SqlNotificationRequest类并自行处理服务/队列部署。选择你的毒药。
https://stackoverflow.com/questions/35780125
复制相似问题