ADO.NET 数据 reader 与直接在 SSMS 中执行
ADO.NET Data reader vs direct execution in SSMS
我们的一位客户遇到了一个奇怪的问题。当客户端 运行s 使用 ADO.NET SqlDataReader 的存储过程(从与 SqlServer 位于同一服务器上的桌面应用程序调用)时,SqlDataReader需要很多时间来执行并最终超时。如果我从 SSMS 执行相同的存储过程(相同的参数),它几乎立即 运行(涉及的表不是很大)。
涉及的表已经建好索引,前一天晚上重建了索引。
如果我 运行 一个 "ALTER PROCEDURE procname..",那么 SqlDatareader 也会立即启动 运行ning,但只持续一段时间(大约 1-2 周),然后它又开始挂了。
问题只发生在客户端服务器上(Sql 2005),如果我备份他的数据库,我们的服务器上没有任何问题。
你能建议我应该采取什么措施来防止这种情况发生吗?
在某个时间间隔重新编译程序是否是 "normal" 解决此问题的方法?
谢谢!
每次你alter/create程序运行得很快,对吧?
您可以在声明过程时使用重新编译选项并进行测试:
CREATE/ALTER (name) (parameters) WITH RECOMPILE AS
你也可以使用 with exec 语句:
EXECUTE procedure_name WITH RECOMPILE
希望对您有所帮助
我们的一位客户遇到了一个奇怪的问题。当客户端 运行s 使用 ADO.NET SqlDataReader 的存储过程(从与 SqlServer 位于同一服务器上的桌面应用程序调用)时,SqlDataReader需要很多时间来执行并最终超时。如果我从 SSMS 执行相同的存储过程(相同的参数),它几乎立即 运行(涉及的表不是很大)。
涉及的表已经建好索引,前一天晚上重建了索引。
如果我 运行 一个 "ALTER PROCEDURE procname..",那么 SqlDatareader 也会立即启动 运行ning,但只持续一段时间(大约 1-2 周),然后它又开始挂了。
问题只发生在客户端服务器上(Sql 2005),如果我备份他的数据库,我们的服务器上没有任何问题。
你能建议我应该采取什么措施来防止这种情况发生吗?
在某个时间间隔重新编译程序是否是 "normal" 解决此问题的方法?
谢谢!
每次你alter/create程序运行得很快,对吧?
您可以在声明过程时使用重新编译选项并进行测试:
CREATE/ALTER (name) (parameters) WITH RECOMPILE AS
你也可以使用 with exec 语句:
EXECUTE procedure_name WITH RECOMPILE
希望对您有所帮助