sql查询通知服务问题

时间:2013-03-05 21:09:22

标签: sql-server sql-server-2008-r2

我们的数据库出现超时问题。所以我在SQL Server Profiler上进行了操作,看到SQLQueryNotificationService每秒运行一次,持续时间很长。我检查了Service Broker,并创建了大量SQLQueryNotificationService队列。我不认为我们创建了这些队列中的任何一个也存在大量的存储过程,如SqlQueryNotificationStoredProcedure-15c5b84b-42b0-4cfb-9707-9b1697f44127。你能告诉我怎么放弃它们吗?如果我删除它们对数据库有什么影响吗?请告诉我。我很感激任何建议。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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