随着时间的推移,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