0

我们的客户报告了一个我无法解释的有趣现象:在他们将数据库兼容性级别从 2016 年更改为 2008 年,然后回到 2016 年,存储过程中使用的函数的性能显着提高 - 从 9 秒到 4 秒。他们不执行具有 2008 兼容性的程序,仅重置兼容性。

我执行了几次该程序,然后翻转了兼容性,并再次使用相同的参数执行了相同的程序 - 它使用相同的计划,但完成得更快。可能是什么原因?这是我用来比较性能及其计划的查询。

查询计划

4

2 回答 2

0

当我们改变一个数据库的兼容级别时,会导致缓存的存储过程计划被移除。例如,当我们在 Adventureworks 数据库中执行以下存储过程时,它会将其插入到计划缓存中。

   EXEC uspGetEmployeeManagers 96

在此处输入图像描述

然后我们将更改数据库的兼容性,此操作将删除缓存的存储过程计划。

ALTER DATABASE AdventureWorks2017 SET COMPATIBILITY_LEVEL= 100

在此处输入图像描述

因此,在更改数据库的兼容级别后,存储过程将使用新的查询计划。使用新的存储过程查询计划可以提高查询性能。

于 2021-07-07T08:18:59.340 回答
0

可能有一些更新的特性会影响这个旧的存储过程。由于您没有显示代码,因此很难查明问题的根源。

于 2021-07-05T04:22:18.317 回答