Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程性能会随着时间的推移而下降_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 存储过程性能会随着时间的推移而下降

Sql 存储过程性能会随着时间的推移而下降,sql,sql-server,tsql,Sql,Sql Server,Tsql,这是我的第一篇帖子,所以如果你需要澄清任何事情,请告诉我 我的服务器详细信息如下:- Windows 2008数据中心版 SQL 2008标准版(10.0.1600) 12GB内存 四核单处理器机器 问题 我有一个运行的存储过程,当我刚刚启动SQL时,运行大约需要十分之一秒。经过一段时间后,运行同一查询大约需要3秒钟 我最初认为是索引导致了问题,但如果我制作存储过程的精确副本并运行复制的版本,那么该查询现在只需要十分之一秒,而原始查询仍然需要3秒 我现在假设这与正在缓存的存储过程的执行计划有关,

这是我的第一篇帖子,所以如果你需要澄清任何事情,请告诉我

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

问题
我有一个运行的存储过程,当我刚刚启动SQL时,运行大约需要十分之一秒。经过一段时间后,运行同一查询大约需要3秒钟

我最初认为是索引导致了问题,但如果我制作存储过程的精确副本并运行复制的版本,那么该查询现在只需要十分之一秒,而原始查询仍然需要3秒

我现在假设这与正在缓存的存储过程的执行计划有关,当存储过程再次运行时,执行计划就会混乱

到目前为止我尝试过的事情
我目前有一个每15分钟运行一次的维护计划,该计划会对一个小表重新编制索引,由于某种原因,存储过程的执行时间会下降到正常水平,但随后时间又突然回升

创建了存储过程的副本以对其进行测试,该副本以十分之一秒的速度运行,而原始存储过程仍然需要很长时间

运行“更新统计信息”存储过程以确保所有统计信息都是最新的

运行SQL查询探查器以查看它是否对表上的其他索引提出了任何建议,最后它提出了一些建议,将我的索引和数据库大小增加到70gb以上,而性能的提高是可以忽略的

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

其中一个连接表有1.3亿行长


db是从2005年到2008年的升级。

我觉得这好像是参数嗅探


15分钟的重新索引(是否需要!?)将导致重新编译从属过程。有时,在这种情况下,下一次执行时传递的参数值对于一般情况来说是次优的。您可以使用来防止这种情况发生。

这似乎是由参数嗅探引起的。这里有一个很好的解释:


存储的进程做什么?我们可以看一些简短的逻辑代码吗?我在存储过程中已经有了很多参数,并且查询的形状实际上不会因不同的参数而改变。查询中的参数是日期、客户id、类别id等。稍后我将进一步研究这篇文章。@Chris-这与查询的形状无关。例如,问题是,当使用异常有选择性的参数编译过程时,您可能会得到一个不同的计划,其中包含索引查找和书签查找,这对于选择性较低的情况来说不是最佳的。我每15分钟执行一次重新索引,以便查询再次正常运行。一旦发生小的重新指数,它们又会下降到十分之一秒?这让我相信这与执行计划或某种参数有关caching@Chris-我会放弃重新索引,使用
优化未知
提示。谢谢Martin,我将尝试一下,看看是否有任何性能提升。或者更确切地说,没有退化。到目前为止,一切似乎都很好,我现在已经禁用了15分钟的维护计划,我一直在检查网站。到目前为止,我还没有在网站上退化和实施是容易的。这个解释也很有道理。一旦我做了2个小时的测试,我会标记答案。太好了,现在已经5个小时了,没有任何查询降级。这种关于查询计划器的新发现的智慧促使我重新访问一些旧的查询,以确保它们都是最新的。谢谢