Sql server 2008 存储过程的逐渐减速

Sql server 2008 存储过程的逐渐减速,sql-server-2008,tsql,ado.net,Sql Server 2008,Tsql,Ado.net,我观察到我的应用程序通过ADO.NET连接调用的存储过程的一种非常奇怪的性能行为。 随着时间的推移,这个过程似乎逐渐变慢,大约一个月后,它变得如此缓慢,以至于超过了240秒的超时时间,但是如果一个人改变了这个过程,甚至没有改变它的代码,它就被治愈了,并在大约10秒钟内完成,但在另一个月左右,它又变得像冷蜂蜜一样缓慢 然而,当从ManagementStudio调用时,它总是像新的一样工作,因此我不能责怪ADO.NET接口之外的任何东西,尽管我不了解它可能如何改变过程的性能。我通过只包含身份验证数据

我观察到我的应用程序通过ADO.NET连接调用的存储过程的一种非常奇怪的性能行为。 随着时间的推移,这个过程似乎逐渐变慢,大约一个月后,它变得如此缓慢,以至于超过了240秒的超时时间,但是如果一个人改变了这个过程,甚至没有改变它的代码,它就被治愈了,并在大约10秒钟内完成,但在另一个月左右,它又变得像冷蜂蜜一样缓慢

然而,当从ManagementStudio调用时,它总是像新的一样工作,因此我不能责怪ADO.NET接口之外的任何东西,尽管我不了解它可能如何改变过程的性能。我通过只包含身份验证数据的最简单的连接字符串打开连接,并且不更改SqlConnection对象的任何属性

你能帮我找出这种影响的原因吗


我已经公布了程序。代码不是我的,我知道它写得很糟糕,但这似乎与问题无关,我计划重写它,使其具有可读性,然后对其进行优化。

参数嗅探,尝试添加选项重新编译或。线索是,根据参数的不同,可能有许多执行计划,其中一个是缓存的,因此对于不同的参数值可能不是最好的。请尝试:CREATE PROCEDURE[dbo]。[gtgetordri]@CardCode nvarchar30,@WhsCode int WITH RECOMPILE也非常感谢,我正在读这篇文章。也许是时候刷新索引的统计数据了。提示:使用适当的软件MySQL、Oracle、DB2等来标记数据库问题是很有帮助的。。。和版本,例如sql-server-2014。语法和功能的差异通常会影响答案。我发现执行计划取决于OITL中为@whsCode和@cardCode嗅探值返回的条目数。虽然该过程只是偶尔被调用,但使用重新编译是一种有效的解决方案。