2

我们的数据库出现超时问题。所以我打开了 SQL Server Profiler 并看到 SQLQueryNotificationService 每秒运行很长时间。我检查了 Service Broker 并创建了一堆 SQLQueryNotificationService 队列。我认为我们没有创建任何这些队列,也有一堆存储过程,比如这些 SqlQueryNotificationStoredProcedure-15c5b84b-42b0-4cfb-9707-9b1697f44127。你能告诉我如何丢弃它们吗?如果我删除它们对数据库有任何影响吗?请告诉我。我很感激任何建议。

4

1 回答 1

3

您是否有一个正在运行的 ASP.Net 网站或另一个创建 Sql Server 缓存依赖项的应用程序?它是 Sql Server Service Broker 队列,它执行等待大约一分钟(60000 毫秒)的 WAITFOR ... 语句,然后在下一秒再次执行。通常不应该引起问题,它不应该阻塞或延迟您的“正常”查询或存储过程。

但是,我曾经看到它给我带来了问题——其中一个存储过程,当从建立缓存依赖关系的同一个 Web 应用程序执行时,超时(或者更确切地说,在 120 秒内返回,这是不可接受的)。完全相同的存储过程,在具有相同参数的相同帐户下执行,但来自 Management Studio,运行良好,没有任何问题。它是 SQL Server 2005 SP4。

SQL Profiler 显示,在执行我的存储过程的过程中(并且总是在相同的 INSERT INTO ... 语句之后),它的执行被中断了,而不是它的语句有 WAIT FOR .... 来自 Sql Query Notification,在一分钟内完成,然后另一个 WAIT FOR... 开始并再次在 59 秒内完成 - 仅在此之后 Profiler 才向我显示我的存储过程已完成。持续时间为 119000,几乎正好是两分钟。

如果该查询通知正在我的存储过程中加入事务。

有什么帮助:重新编译有问题的存储过程。我只是改变了它的脚本,用一些小的语法改变做了 ALTER 语句。之后就没有问题了。

于 2013-05-28T15:43:47.547 回答