2009-03-05 106 views
7

我有一个网络服务,一直运行良好,现在几年没有修改。突然间,它今天决定它不会运行,并引发SQL超时:SQL Server超时故障排除

System.Data.SqlClient.SqlException:超时过期。操作完成之前超时的时间或服务器没有响应。

有趣的是,这个Web服务与数据库位于同一台服务器上,并且如果我将查询从SQL跟踪中拖出并在管理工作室中运行,它将在一秒钟内返回。但是,从Web服务中调用确切的30秒后,它会超时。我正在使用企业库连接到数据库,所以我无法想象随机开始失败。

我不太确定什么能突然让它停止工作。我回收了它所在的应用程序池,甚至重新启动了我看到它正在使用的SQL过程。同样的行为。任何方式我可以解决这个问题?

更新:米奇它。一旦我在sproc定义中的“AS”关键字之前添加了“WITH RECOMPILE”,它就会恢复生机。好样的!

+0

@Chris:请注意,你不应该加上WITH RECOMPILE,除非它是最后一道沟渠。使用RECOMPILE FOR更有针对性 – 2009-03-05 00:16:57

回答

4

您描述的症状有99.9%确定是由于缓存不正确的查询计划造成的。

请参阅这些问题的答案:

其中包括建议重建索引,确保统计数据是最新的一个起点。

您是否安排并启用定期索引维护工作?

标准基准是:Slow in the Application, Fast in SSMS?

+0

您,先生,是我的英雄。 – Chris 2009-03-05 00:14:17

1

重建任何相关的索引。

1

更新统计信息,检查探查器中查询的设置选项。 SSMS可能使用不同的连接设置选项。