我有一个网络服务,运行良好,未经修改几年了。突然今天它决定它不想运行,并抛出SQL超时:
System.Data.SqlClient.SqlException:超时已过期。操作完成之前经过的超时时间或服务器没有响应。
有趣的是,此Web服务与数据库位于同一服务器上,如果我将查询从SQL跟踪中拉出并在管理工作室中运行,则会在一秒钟内返回。但是,当从Web服务调用时,它会在30秒后超时。我正在使用企业库连接到数据库,所以我无法想象随机开始失败。
我不太确定突然让它停止工作的原因。我已经回收了它所在的应用程序池,甚至重新启动了我看到它正在使用的SQL进程。相同的行为。我有什么方法可以解决这个问题吗?
更新: Mitch 钉它。一旦我在sproc定义中的“AS”关键字之前添加了“WITH RECOMPILE”,它就恢复了生机。喝彩!
答案 0 :(得分:4)
您描述的症状是99.9%肯定是由于错误缓存的查询计划造成的。
请看这些答案:
包括重建索引的建议,并确保统计数据是最新的起点。
您是否安排并启用了常规索引维护作业?
答案 1 :(得分:1)
重建任何相关索引。
答案 2 :(得分:1)
更新统计信息,检查分析器中查询的设置选项。 SSMS可能正在使用不同的连接集选项。