我的一位客户遇到了一个奇怪的问题。当客户端使用ADO.NET SqlDataReader(从位于与SqlServer相同的服务器上的桌面应用程序调用)运行存储过程时,SqlDataReader需要花费大量时间来执行并最终超时。如果我从SSMS执行相同的存储过程(相同的参数),它几乎立即运行(涉及的表不是很大)。
所涉及的表都被编入索引,索引在前一天晚上重建。
如果我运行“ALTER PROCEDURE procname ..”,那么SqlDatareader也会立即开始运行,但只持续一段时间(1-2周),然后它再次开始挂起。
问题仅发生在客户端服务器(即Sql 2005)上,如果我备份他的数据库,我们的服务器上的工作没有任何问题。
您能否建议我采取哪些措施来防止这种情况发生?
以某种时间间隔重新编译程序是一种“正常”的方法来解决这个问题吗?
谢谢!
答案 0 :(得分:0)
每次更改/创建程序时,它都能快速运行,对吧?
在声明您的程序并进行测试时,您可以使用重新编译选项:
CREATE/ALTER (name) (parameters) WITH RECOMPILE AS
您也可以使用exec语句:
EXECUTE procedure_name WITH RECOMPILE
希望有所帮助