我们有一个托管在SQL Azure中的数据库,我们通过云服务Web应用程序连接到该数据库。每隔一段时间,一个返回100行的特定存储过程在从实际的Web应用程序运行时就会抛出超时异常。当我们使用SQL Management Studio中的相同参数运行相同的存储过程时,我们会得到实际结果。这个问题持续了一段时间,有时会像发生时一样迅速消失。
其他存储过程和从我们的应用程序中检索数据都很有魅力,但有一个特定的SP出现了这个问题,这很奇怪。当问题发生时,我们可以通过在where子句中添加类似WHERE 1=1
的内容来临时修复它。然后它会起作用一段时间,但在某个时候,整个事情会重新开始。我不知道这里出了什么问题,也不知道是什么原因导致了这种情况。我们还将WITH RECOMPILE
添加到存储的proc中,但没有成功。
我也经历了同样的事情。我检查了执行计划,一切看起来都很好。所以我把数据库复制到我的本地机器上,它在那里运行没有任何问题。最后,我决定放弃并重新创建超时的存储过程。完成此操作后,SP再次正常运行,没有超时。
我们也有同样的问题,尤其是在升级或降级服务器之后。我们发现,包括"with recompile"在内的快速更改可以解决问题。在对其进行一次更改后,我们将关闭重新编译。不确定Azure是否在执行计划中发生了某种损坏或正在发生什么。如果不确信您需要"重新编译",您可能只需要进行更改。