为什么我们在存储过程性能中看到大幅波动

时间:2016-03-28 16:34:17

标签: sql-server

我正在处理存储过程,我们发现性能差异很大。从一组表中读取所有过程。

问题在于它通常以< 1s性能开始。然后,在本周晚些时候,相同的查询在> 7s中运行。我们希望保持这个< 1s。该问题可能与参数嗅探有关,但在这种情况下,重新编译语句不会对性能产生正面或负面影响。我们还在2个相同硬件的独立系统上重现了这种行为。

以下是我们所知道的:

  • 使用的8个表中有3个具有较高的更新/插入速率,但数据量较小。在触摸桌子的每个地方都有覆盖索引。大多数桌子非常小且可以快速访问。
  • 查询需要类似的计划行为:查找1个项目并以1行/月的形式阅读12个月的摘要。然后调整所有12个月的成本,转速和预算。 (每个度量得到12列,因此输出36列)

这是我们试图无效的事情:

  • 查询提示
      

    (FORCESEEK)

  • 运行查询(使用重新编译)或强制对存储过程进行重新编译的所有查询
      

    CREATE PROCEDURE usp_ProjectSummary @ProjectID INT

         

    WITH RECOMPILE

  • 使用提示指定的未知变量

这里有什么帮助以及我们到目前为止所处的位置:

  • 临时表
  • 使用

    强制使用固定计划
      

    选项(保留计划)

  • 定期运行以下2个语句以强制执行一个好的查询计划:

      

    EXEC sp_recompile usp_ProjectSummary

         

    EXEC usp_ProjectSummary @ProjectID

0 个答案:

没有答案