随着时间的推移,Sproc性能会下降

这是我的第一篇文章,所以如果你需要澄清任何事情,那就让我知道。

我的服务器详细信息如下所示: - Windows 2008 Datacenter版本
SQL 2008标准版(10.0.1600)
12GB内存
四核心单处理器机器

问题
我有一个运行的存储过程,当我刚刚启动SQL时,大约需要1/10秒才能运行。 经过一段时间后,运行相同的查询需要大约3秒的时间。

我原本以为是造成问题的索引,但是如果我制作精确的副本并运行复制的版本,那么现在查询只需要1/10秒,而原始的仍然需要3秒。

我现在假设它与缓存的sproc的执行计划有关,并且当sproc再次运行时,它将执行计划搞乱了。

我迄今尝试过的东西
我目前有一个维护计划,每15分钟运行一次,为一张小表重新编制索引,由于某些原因,我的sprocs执行时间回落到正常水平,但时间又突然恢复。

创建了一个sproc副本来测试它,并且一个在1/10秒运行,而原始的仍然需要很长时间。

运行“更新统计信息”sproc以确保所有统计信息都是最新的。

使用SQL查询分析器查看它是否对其他应该在表上的索引提出任何建议,最终提出了一些建议,将我的索引和分区大小增加到70gb以上,并且性能提高很小。

其他信息要注意
数据库在同一实例中分布在两个数据库中,一个包含产品信息,另一个包含客户信息。

其中一个连接表是1.3亿行。

数据库是从2005年到2008年的升级。


这似乎是参数嗅探我。

你15分钟重新编制索引(你是否需要!?)将导致依赖过程被重新编译。 有时候会发生这种情况,在下一次执行时传递的参数值在一般情况下是次优的。 您可以使用OPTIMIZE FOR来防止这种情况发生。


这看起来像是由参数嗅探引起的。 这是一个很好的解释:

我嗅到一个参数!

SQL垃圾收集器:参数嗅探和存储过程执行计划

链接地址: http://www.djcxy.com/p/62241.html

上一篇: Sproc performance degrades over time

下一篇: SQL Server: Query fast, but slow from procedure