我们有一个夜间作业,在遗留数据库中运行一个复杂的存储过程。存储过程使用不同的参数运行四次。在增加服务器上的 CPU 和内存之前,第一次运行通常会在 30 秒后超时(当前默认超时),随后的运行会执行得更快。
OPTION (RECOMPILE) 是在存储过程中的查询上设置的,我怀疑执行计划的重新编译可能是罪魁祸首。但是,如果仅归结为执行计划的编译,大概这会对作业中对存储过程的每次调用产生类似的影响,而不仅仅是第一次调用。
难道是在创建第一个执行计划时必须重新构建一些昂贵的依赖统计信息,并且这些统计信息被重复用于后续的重新编译?
如果是这种情况,我将如何诊断?此外,除了增加第一次通话的超时时间之外,有没有办法解决这个问题?