Sql server sql server存储过程中的首次运行缓慢

Sql server sql server存储过程中的首次运行缓慢,sql-server,optimization,Sql Server,Optimization,我有一个一天运行九次的存储过程,就在午夜之后。它不是一个理想的存储过程,但您知道它是如何实现的。任何计划都不能脱离现实 此存储过程通常需要大约一分钟的时间来运行,对于它所处理的数据量,它需要多少时间。然而,在某个上午的第一次跑步中,有时会花费过多的时间,有时会比通常需要的时间长一个数量级(如果跑完的话)。如果我杀了它并重新启动它,它会正常运行 我正在寻找一个优雅的解决方案——至少比我的第一个想法更优雅,即先运行一个额外的运行,它不会生成我使用的数据,并且可以容忍失败 以前有人见过这种行为吗?您是

我有一个一天运行九次的存储过程,就在午夜之后。它不是一个理想的存储过程,但您知道它是如何实现的。任何计划都不能脱离现实

此存储过程通常需要大约一分钟的时间来运行,对于它所处理的数据量,它需要多少时间。然而,在某个上午的第一次跑步中,有时会花费过多的时间,有时会比通常需要的时间长一个数量级(如果跑完的话)。如果我杀了它并重新启动它,它会正常运行

我正在寻找一个优雅的解决方案——至少比我的第一个想法更优雅,即先运行一个额外的运行,它不会生成我使用的数据,并且可以容忍失败


以前有人见过这种行为吗?您是如何解决的?

存储过程在sqlserver中进行了更改

如果使用DBCC FREEPROCCACHE,它将重新编译sql语句

如果您的服务器正在重新启动(比如每夜或每周),它可能正在清除缓存,这将导致查询在第一次尝试时运行缓慢


您可以通过运行上述命令并运行查询来测试是否发生了相同的情况。。。如果是这样,我会说您的缓存正在被清除。

可能是编译时和冷数据缓存(缓冲池)。如果它通常需要一分钟,那么我猜它也相当粗

编译时:执行计划在统计信息更新时失效。如果您有批量处理或夜间维护,您可能会遇到这种情况

冷缓存:数据/索引页必须从磁盘进入内存

为了缓解这些问题:

  • 模拟运行(如上所述)
  • 更快的IO或更多的RAM

我们有时也会遇到同样的问题,特别是在开发框上,比如我们的网站超时了。我们只需再次单击…

为了提供解决方案,首先要做的是调查原因。可能有许多问题会表现为您描述的症状。始终按照调查方法开始性能问题的故障排除,如。这将揭示为什么程序在第一次运行时速度慢。可能的罪犯:

  • 冷库
  • 与另一个进程争夺某些资源(锁?)
  • 参数嗅探导致错误的计划
根据您发现的问题,将有一个适当的解决方案


有一件事你不应该盲目地更改设置,希望问题消失,而永远不知道是什么错。

上的数据库是自动更新统计信息还是自动更新统计信息异步?可能是第一次运行时注意到需要更新统计信息,并且这样做了。在前一个set选项中,它等待统计信息更新完成,而在后一个选项中,它不等待统计信息更新,但可能会选择一个次优的计划,从而导致性能不佳。

在每天第一次运行过程的同时,还会发生什么?是否可能是从其他进程(备份、统计信息更新、其他计划作业)获取锁?

您是否使用任何动态SQL或非sargable参数?是否有任何原因导致缓存的存储过程执行计划一夜之间丢失?@Rup:statistics update for One如果您能够将正常运行时间减少一半或更多,这仍然是个问题吗?为什么这是一个需要2分钟的问题?最终我通过更新存储过程以使用动态搜索条件解决了这个问题。(是经典指南)此更改将所有运行(包括第一次运行和其他运行)的处理时间缩短到亚秒。@quillbreaker:good。。你有结果了。该网站非常值得一读,因为它在第一次运行时花费了很长时间,所以它不可能仅仅是一个编译问题,除非他们用图形计算器替换我们的SQL Server硬件。