SQL Server -SP执行路径存储在Stack上?

时间:2009-08-26 06:22:27

标签: sql-server sql-server-2005

当我第一次执行存储过程时,它(例如)需要3分钟才能执行。 一旦预编译,执行需要1分钟。

3个月后(不再使用SP),当我再次尝试执行时,需要3分钟。

我的问题

执行路径是否存储在堆栈中?或者是由于其他一些因素?如果我理解错误,请纠正我。

4 个答案:

答案 0 :(得分:3)

执行计划存储在缓存中,正如其他人指出的那样,甚至表数据都存储在缓存中,并且会尽可能长时间地保留在缓存中。在您的情况下,编译时间不是问题。

可能是:

  • 存储过程正在使用不同的执行计划
  • 您的索引已碎片化
  • 统计信息已过期,导致执行计划错误
  • 你的内存不足

尝试使用以下代码执行存储过程之前

SET STATISTICS IO ON

并查看您的过程是否使用物理读取或逻辑读取。如果它是逻辑的,它使用缓存来获取数据

答案 1 :(得分:2)

出于多种原因,可以从缓存中删除它。通常:

  • 记忆压力
  • 统计和索引重建
  • 服务器重启(当然)

性能差异通常也是表加载时间(索引,统计信息,数据等)

它不是用c#或c ++意义编译的

答案 2 :(得分:1)

根据http://technet.microsoft.com/en-us/library/ms181055%28SQL.90%29.aspx

似乎该计划最初会被缓存,但在其他计划被缓存后会在一段时间后被删除。

答案 3 :(得分:1)

时差当然不是因为创建执行计划所花费的时间。在最糟糕的情况下,如果必须从磁盘加载所有统计信息,可能需要一秒左右的时间......

时间差异很可能是因为表和索引必须首次从磁盘加载,并缓存以用于后续执行。