我们的客户报告了一个我无法解释的有趣现象:在他们将数据库兼容性级别从2016更改为2008,然后又更改回2016后,从存储过程使用的函数的性能显著提高-从9秒提高到4秒。他们不执行具有2008兼容性的过程,只重置兼容性。
我执行了几次该过程,然后翻转兼容性,再次使用相同的参数执行相同的过程-它使用相同的计划,但完成速度快得多。原因可能是什么?下面是我用来比较性能及其计划的查询。
Query plan
我们的客户报告了一个我无法解释的有趣现象:在他们将数据库兼容性级别从2016更改为2008,然后又更改回2016后,从存储过程使用的函数的性能显著提高-从9秒提高到4秒。他们不执行具有2008兼容性的过程,只重置兼容性。
我执行了几次该过程,然后翻转兼容性,再次使用相同的参数执行相同的过程-它使用相同的计划,但完成速度快得多。原因可能是什么?下面是我用来比较性能及其计划的查询。
Query plan
2条答案
按热度按时间vc9ivgsu1#
可能有一些新的特性正在影响这个旧的存储过程。由于您没有显示代码,因此很难查明问题的根源。
r7xajy2e2#
更改数据库的兼容级别时,将导致删除缓存的存储过程计划。例如,当我们在Adventureworks数据库中执行以下存储过程时,它将把该存储过程插入到计划缓存中。
然后我们将更改数据库的兼容性,此操作将删除缓存的存储过程计划。
因此,更改数据库的兼容级别后,存储过程将使用新的查询计划。使用新的存储过程查询计划可能会提高查询性能。