【发布时间】:2015-07-21 07:59:23
【问题描述】:
我们的一位客户遇到了一个奇怪的问题。当客户端使用 ADO.NET SqlDataReader(从与 SqlServer 位于同一服务器上的桌面应用程序调用)运行存储过程时,SqlDataReader 需要大量时间来执行并最终超时。如果我从 SSMS 执行相同的存储过程(相同的参数),它几乎会立即运行(涉及的表不是很大)。
所涉及的表已编入索引,索引已在前一天晚上重建。
如果我运行“ALTER PROCEDURE procname..”,那么 SqlDatareader 也会立即开始运行,但只运行一段时间(大约 1-2 周),然后它又开始挂起。
问题仅发生在客户端服务器(即 Sql 2005)上,如果我备份他的数据库,我们的服务器上的工作正常,没有任何问题。
您能否建议我应该采取什么措施来防止这种情况发生?
在某个时间间隔重新编译过程是解决此问题的“正常”方法吗?
谢谢!
【问题讨论】:
-
您是否尝试过制作个人资料?只是为了测试,尝试清理执行 DBCC DROPCLEANBUFFERS 和 DBCC FREEPROCCACHE 的缓存。让我知道结果。
-
客户端只有一个快速版本的 Sql 20005,所以我无法访问探查器,并且在我的服务器上问题不是复制。我会尝试其他建议,看看发生了什么。谢谢里卡多!
-
我明白了。因此,每次您更改/创建程序时,它都会快速运行,对吗?请在声明过程并进行测试时尝试重新编译选项:CREATE/ALTER (name) (parameters) WITH RECOMPILE AS ..... 您也可以使用 with exec 语句:EXECUTE procedure_name WITH RECOMPILE
-
我采纳了你的建议,我修改了 sp。我会看看客户将来是否会抱怨。请将此作为答案。非常感谢里卡多!
标签: sql-server stored-procedures ado.net sqldatareader