我正在从2016到2019年迁移sql服务器。我知道,默认情况下,迁移后数据库将保持现有的兼容性水平。升级兼容性级别可启用新功能。
Microsoft建议采用下面的方法来升级兼容性级别以避免倒退:

兼容性级别升级会导致任何破坏结果吗?还是查询回归(我认为这意味着由于执行计划选择不当而花费的时间比平时长)是兼容性升级的唯一负面影响?
发布于 2022-04-13 11:48:26
查询性能回归是主要关注的问题,也是Microsoft建议在更改兼容性级别之前首先启用查询存储的原因。这允许Query在更改兼容性级别之前构建主要查询的性能基线,以便在更改兼容性级别之后进行比较,以便它能够提供查询倒退的信息和指标(变得更慢)。正如文档中提到的,您可以使用Query强制将“最后一个已知的好计划”作为短期修复,同时分析如何使用更好的长期修复优化该查询。
当然,通过更改兼容性级别总是有可能遇到错误,但我认为这比在实际实例版本升级中遇到bug的可能性要小。例如,当我最近从2016年升级到2019年RTM时,我遇到了一个带有所有权链接的错误,这个函数是通过链接服务器调用的。这是通过安装当前为铜15的最新CU来解决的。因此,将2019年实例修补到最新的CU以减少任何bug是非常重要的。
这也是为什么建议您首先在开发服务器中进行版本升级,等待几周或几个月来分析结果,然后在经过充分测试后在生产中应用相同的升级。
发布于 2022-04-13 13:23:37
我还想在其他答复中补充一下,因为你将从2016年到2019年,自2016年以来一直有这样的答复。
当然,以上只是记录在案的内容。
发布于 2022-04-13 11:50:53
是的,升级兼容性级别会导致破坏结果。
以下是使用兼容性级别进行向后兼容性文档的摘录:
在给定的Server版本中引入的中断更改可能不受兼容性级别的保护。这指的是Server数据库引擎不同版本之间的行为更改。Transact-SQL行为通常受兼容性级别的保护。但是,更改或删除的系统对象不受兼容性级别的保护。兼容性级别保护的中断更改的一个示例是从datetime到datetime2数据类型的隐式转换。在数据库兼容性级别130下,这些值通过计算分数毫秒来提高准确性,从而产生不同的转换值。若要恢复以前的转换行为,请将数据库兼容性级别设置为120或更低。不受兼容性级别保护的破坏更改的示例如下:
相关内容:Server中停止的数据库引擎功能。
https://dba.stackexchange.com/questions/310890
复制相似问题