【问题标题】:Stored Procedure is faster the 2nd time存储过程第二次更快
【发布时间】:2019-08-29 20:20:43
【问题描述】:

我在 SQL Server 2017 上运行 SP

我第一次执行 SP 花了 43 秒

但第二次只用了 1 秒

如何在没有缓存或从以前的经验中学习的情况下每次都像第一次一样执行 SP?

我不是在问为什么,因为这个问题想知道为什么会这样 First run slowness in a sql server stored procedure

我在问,如何让它和第一次一样。

我希望我的程序每次执行时都像第一次一样

【问题讨论】:

  • 自第二次执行后是否运行缓慢?
  • 并不罕见。第一次运行它必须创建一个执行计划,第二次它被缓存。数据可能已经在内存中,等等。
  • “我希望我的程序每次执行时都像第一次一样” 为什么您希望您的 SP 每次运行都需要 43 秒?不是更快更好..?
  • 当然越快越好,但出于培训目的,我想获得初始状态

标签: sql-server stored-procedures


【解决方案1】:

如果要删除存储的计划缓存,可以执行DBCC FREEPROCCACHE。请注意,它将为所有存储过程获得一个干净的状态。

请记住,一旦计划被编译,它将被存储以供将来调用,直到 SP 被更改或依赖对象也被修改。所以大多数时候你想要测试的实际上是已经编译好的计划的性能,除非你不断地清除这些缓存,重新启动服务器或以某种方式触发重新编译。

【讨论】:

    【解决方案2】:

    运行:

    CHECKPOINT;
    DBCC DROPCLEANBUFFERS;
    

    在每次执行之前。这将清除缓冲池,以便公平竞争,并且每次迭代都会产生大致相同的 IO 开销。

    另请参阅Performance testing with DBCC DROPCLEANBUFFERS,了解使用此方法测量性能的其他注意事项。

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多