兼容性认证

适用范围:SQL Server Azure SQL 数据库 Azure SQL 托管实例

兼容性认证使企业能够在本地、云中和边缘升级和现代化 SQL Server 数据库,消除了应用程序兼容性风险。

相同的 数据库引擎 同时支持 SQL Server 和 Azure SQL 数据库(包括 Azure SQL 托管实例)。 此共享 数据库引擎 意味着用户数据库可以在本地 SQL Server 和 Azure SQL 数据库 之间顺畅移动,而在数据库中以 Transact-SQL 执行的应用程序代码将继续像在源系统中那样工作。

对于 SQL Server 的每个新版本,默认兼容性级别将设置为 数据库引擎 的版本。 但会保留以前版本的兼容性级别,以持续兼容现有应用程序。 此兼容性矩阵可在此处查看。 因此,经认证可与给定的 SQL Server 版本一起使用的应用程序实际上经过了认证,可在该版本的默认兼容性级别工作。

例如,数据库兼容性级别 130 是 SQL Server 2016 (13.x) 的默认兼容性级别。 由于兼容性级别强制执行特定的 Transact-SQL 功能和查询优化行为,因此在数据库兼容性级别 130 上隐式认证了经认证可在 SQL Server 2016 (13.x) 上工作的数据库。 只要数据库兼容性级别保持为 130,此数据库就可以像在 SQL Server 的更新版本(如 SQL Server 2019 (15.x) 和 Azure SQL 数据库)中工作。

这是 Microsoft Azure SQL 数据库 持续集成操作模型的基本原则。 数据库引擎 在 Azure 中持续改进和升级,但由于现有数据库保持其当前兼容性级别,因此即使在升级到基础 数据库引擎 数据库后,它们仍将继续按设计的形式工作。

SharePoint Server 2016 和 SharePoint Server 2019 也通过这种方式在 SQL Server 和 Azure SQL 托管实例上获得了认证,因此,你可以部署任何可使用这些 SharePoint Server 版本支持的数据库兼容级别的 SQL Server 数据库引擎。 有关详细信息,请参阅 SharePoint Server 2016 的硬件和软件要求SharePoint Server 2019 的硬件和软件要求

利用兼容性认证管理升级风险

使用兼容性认证是数据库现代化的一种非常有用的方法。 通过基于兼容性级别进行认证,开发人员可以将应用程序的技术要求设置为在 SQL Server 和 Azure SQL 数据库 上受支持,但应用程序生命周期将从数据库平台生命周期分离出来。 这样,公司便可以根据生命周期策略的要求来升级 SQL Server 数据库引擎、利用不依赖于代码的全新可伸缩性和性能增强,以及通过升级连接应用程序以保持其功能状态。

无论哪种升级,主要的风险因素都是可能对功能和性能产生不利影响。 通过兼容性认证,你可以放心地管理以下升级风险:

  • 在与 Transact-SQL 行为相关的方面,任何更改都意味着需要重新认证应用程序的正确性。 然而,数据库兼容性级别设置提供与 SQL Server 早期版本的后向兼容性,但后向兼容性仅适用于指定的数据库,而不适用于整个服务器。 保持数据库兼容性级别不变,可确保现有应用程序查询在 数据库引擎 升级之前和之后都继续显示相同的行为。 有关 Transact-SQL 行为和兼容性级别的详细信息,请参阅使用兼容性级别实现后向兼容性

  • 在与性能相关的方面,由于每个版本都会引入查询优化器改进,因此,可能会遇到不同 数据库引擎 版本之间的查询计划差异。 如果某些更改可能会对给定查询或工作负荷产生负面影响,则升级范围内的查询计划差异通常会转换为风险。 反过来,这种风险通常会导致需要重新认证应用程序,这可能会延迟升级,并带来生命周期和支持方面的挑战。

    由于需要缓解升级风险,查询优化器改进被限制为新版本的默认兼容性级别(即,适用于任何新版本的最高兼容性级别)。 兼容性认证包括查询计划形状保护(在数据库引擎升级后使用新版本中的相同查询优化模型立即将数据库兼容性级别保持原样的概念),因为它在升级之前进行,并且查询计划形状不应更改。

    有关详细信息,请参阅本文的为什么使用查询计划形状?部分。

有关兼容性级别的详细信息,请参阅使用兼容性级别实现后向兼容性

重要

对于已经针对给定兼容级别认证的现有应用程序,请升级 SQL Server 数据库引擎,并保持以前的数据库兼容性级别。 在这种情况下,无需重新验证应用程序。 有关详细信息,请参阅本文后面部分的兼容性级别和数据库引擎升级

对于新的开发工作,或当现有应用程序需要使用新功能(如智能查询处理)以及一些新的 Transact-SQL 时,请考虑将数据库兼容性级别升级到 SQL Server 中可用的最新级别,并重新认证应用程序可在该兼容性级别使用。 有关升级数据库兼容性级别的详细信息,请参阅升级数据库兼容性级别的最佳做法

为什么使用查询计划形状?

查询计划形状是指组成查询计划的各种运算符的可视化表示形式。 其中包括查找、扫描、联接和排序等运算符,以及它们之间指示数据流和操作(必须执行这些操作才能生成指定的结果集)顺序的连接。 查询计划形状由查询优化器确定。

若要在升级过程中保持查询性能的可预测性,其中一个基本目标是确保使用相同的查询计划形状。 这可通过在升级后不立即改变数据库兼容性级别来实现,即使基础 数据库引擎 具有不同的版本。 如果查询执行生态系统中没有其他更改(例如可用资源的重大更改或基础数据中的数据分布),则查询的性能应保持不变。

但是,保留查询计划的形状并不是在升级后可能影响性能的唯一因素。 如果将数据库移到较新的 数据库引擎,并同时进行环境更改,则可能引入会对查询性能产生即时影响的因素,即使查询计划在不同版本中保留了相同的形状。 这些环境更改可能包括新的 数据库引擎 具有更多或更少的可用内存和 CPU 资源、对服务器或数据库配置选项的更改,或影响查询计划创建方式的数据分布更改。 因此,请务必了解,维护数据库兼容性级别可防止查询计划形状更改,但不能针对影响查询性能的其他环境方面提供保护,其中一些环境更改为用户发起的更改。

有关详细信息,请参阅查询处理体系结构指南

兼容性认证的好处

数据库认证作为基于兼容性的方法而不是命名版本方法有几个直接好处:

  • 将应用程序认证从平台分离出来。 由于其共享的数据库引擎,因此对于只需执行 Transact-SQL 查询的应用程序,无需为 Azure 和本地维护单独的认证过程。
  • 降低升级风险,由于在数据库平台现代化期间,可以分离应用程序与数据库平台层升级周期,因此减少了中断,改进了变更管理。
  • 升级而不更改代码。 升级到 SQL Server 或 Azure SQL 数据库 的新版本可通过保持与源系统相同的兼容性级别,在无需对代码进行更改的情况下完成,并且不需要立即重新认证,直到应用程序需要使用仅在更高的数据库兼容性级别中可用的增强功能。
  • 提高可管理性和可伸缩性,无需更改应用程序并可使用不受数据库兼容性级别限制的增强功能。 例如,在 SQL Server 中,这些功能包括:

新数据库仍设置为数据库引擎版本的默认兼容性级别。 但在将数据库从 SQL Server 的任何早期版本还原或附加到 SQL Server 或 Azure SQL 数据库 的新版本时,数据库将保留其现有的兼容性级别。

重要

将数据库迁移到 SQL Server 或 Azure SQL 数据库 的新版本之前,请验证该数据库兼容性级别是否仍受支持。 数据库兼容性级别支持矩阵可在此处查看。

升级兼容性级别低于允许级别(例如,SQL Server 2005 (9.x) 中的默认级别 90)的数据库会将数据库设置为允许的最低兼容性级别 (100)。

若要确定当前兼容级别,请查询 sys.databases 的 compatibility_level 列。

兼容性级别和数据库引擎升级

要将数据库引擎升级到最新版本,同时维持升级前的数据库兼容性级别及其可支持性状态,建议在数据库(存储过程、函数、触发器等可编程对象)和应用程序(使用捕获应用程序发送的动态代码的工作负荷跟踪)中,对应用程序代码执行静态函数外围应用验证 。

可以使用 Microsoft 数据迁移助手 工具 (DMA) 轻松完成此操作。 DMA 工具输出中没有关于缺失或不兼容功能的错误,可保护应用程序免受新目标版本上的任何功能回归影响。 如果需要进行更改以确保数据库可在新版本中工作,可使用 DMA 确定需要更改的位置以及可用的解决方法。 有关详细信息,请参阅数据迁移助手概述

提示

将数据库从旧版本(例如 SQL Server 2008 R2 (10.50.x) 或 SQL Server 2012 (11.x))移到 SQL Server 或 Azure SQL 数据库的新版本时,此功能验证尤为重要,因为你的应用程序代码可能使用不受数据库兼容性级别保护的已弃用 Transact-SQL。 但从较新版本(如 SQL Server 2016 (13.x))迁移到 SQL Server 2019 (15.x) 或 Azure SQL 数据库时,则无需担心已弃用的 Transact-SQL。 有关已弃用 Transact-SQL 的详细信息,请参阅使用兼容性级别实现后向兼容性

备注

DMA 支持数据库兼容性级别 100 及更高级别。 排除 SQL Server 2005 (9.x) 作为源版本。

重要

Microsoft 建议执行一些最小测试来验证升级是否成功,同时维持之前的数据库兼容性级别。 应该确定适用于自己的应用程序和场景的最小测试。

重要

Microsoft 在下列情况下提供查询计划形状保护:

  • 新版 SQL Server(目标)在相当于之前 SQL Server 版本(源)运行的硬件上运行。
  • 目标 SQL Server 和源 SQL Server 均使用同一支持的数据库兼容性级别
  • 目标 SQL Server 和源 SQL Server 使用同一数据库和工作负载。

上述情况下发生的任何查询计划形状回归(与源 SQL Server 相比)将得到解决。 如果出现这种情况,请与 Microsoft 客户支持服务部门联系。

另请参阅