每月SQL Server存储过程流程的“WITH RECOMPILE”有什么缺点吗?

时间:2008-12-04 22:13:33

标签: sql-server sql-server-2005 stored-procedures

我认为问题就是这么说的。我在存储过程中有几个月过程,需要一分钟到一个小时。如果我声明它们WITH RECOMPILE,则每次都会生成一个执行计划。

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

这有什么缺点吗?

3 个答案:

答案 0 :(得分:2)

在这种情况下,这将是完全无害的,也许是一个好主意。

答案 1 :(得分:1)

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

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

此外,您可能希望查看本文以了解使用该指令的其他原因:
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5662581.html

答案 2 :(得分:1)

如果每个存储过程每月只运行一次,则编译过程仍然不可能仍在过程高速缓存中。无论如何它实际上都会重新编译。

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