2008-12-04 40 views
2

我认为这个问题说明了一切。我在存储过程中有几个月的流程,从一分钟到一小时不等。如果我宣布它们为WITH RECOMPILE,则每次都会生成一个执行计划。针对每月SQL Server存储过程流程的“WITH RECOMPILE”的任何缺点?

如果DBA更改了底层索引或统计信息或视图,我不希望任何人必须进入,并用ALTER或其他方法强制重新编译SP。

这是否有任何缺点?

回答

2

在这种情况下,这将是完全无害的,并且可能是一个好主意。

1

据我所知,如果需要自动重新编译SP。所以你对潜在变化的关注并不重要。

但是,服务器尝试缓存已编译的SP计划。使用WITH RECOMPILE将释放用于缓存编译过程的内存(至少在下次清除缓存时)。由于它们只是每月运行一次,这似乎是一个好主意。

此外,您可能想看看这篇文章的其他原因使用该指令:
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5662581.html

+0

如果有更新的,更好的索引可以使用,或者如果有新的统计数据会如何自动丢弃旧计划? – 2008-12-04 23:07:14

+0

不,只有当计划使用的索引或统计信息被修改时,才会失效的计划。有关使计划失效的更多详细信息,请参阅联机丛书中的“重新编译执行计划”一节中的主题“执行计划缓存和重用”(查找索引中的“过程缓存”)。 – 2008-12-04 23:43:59

1

如果每个存储过程只运行每月一次,这是极不可能的编译程序仍然会在过程缓存中。无论如何它将有效地重新编译。

即使您在报告当天运行相同的存储过程100次,每次只需要0-2秒的时间(取决于存储过程的复杂性),因此这不是一个巨大的开销。我很乐意在这些存储过程中设置WITH RECOMPILE。