SQL Server 将数据库兼容性级别更改为2008并恢复到2016可提高性能-这是怎么做到的?

bz4sfanl  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(255)

我们的客户报告了一个我无法解释的有趣现象:在他们将数据库兼容性级别从2016更改为2008,然后又更改回2016后,从存储过程使用的函数的性能显著提高-从9秒提高到4秒。他们不执行具有2008兼容性的过程,只重置兼容性。
我执行了几次该过程,然后翻转兼容性,再次使用相同的参数执行相同的过程-它使用相同的计划,但完成速度快得多。原因可能是什么?下面是我用来比较性能及其计划的查询。
Query plan

vc9ivgsu

vc9ivgsu1#

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

r7xajy2e

r7xajy2e2#

更改数据库的兼容级别时,将导致删除缓存的存储过程计划。例如,当我们在Adventureworks数据库中执行以下存储过程时,它将把该存储过程插入到计划缓存中。

EXEC uspGetEmployeeManagers 96

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

ALTER DATABASE AdventureWorks2017 SET COMPATIBILITY_LEVEL= 100

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

相关问题