1

我在 SQL Server 2008 上使用 SQL Server Broker 进行具有 SignalR v2.1.2 的横向扩展。最近发现我们每天在数据库日志中产生 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 显然被删除了。为此,数据库将每 5 秒产生一次错误(相当于每天 50k,有 3 个队列)。每个队列都包含一条消息。

问题:

什么会导致这种情况?

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

这是 SQL Server 服务代理中的错误吗?

是否有描述 SignalR 关于队列及其到期的预期行为的文档?

感谢您的时间。

4

1 回答 1

1

这些是从SqlDependency. 的实现SqlDependency.Start()是创建一个即时服务、队列和激活过程(参见参考源)。这有一些问题,即使是简单的 Visual Studio调试会话也会留下搁浅的队列/激活的过程。

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

于 2016-03-04T08:20:39.467 回答