【问题标题】:Old Database Compatibility in Newer SQL Version较新 SQL 版本中的旧数据库兼容性
【发布时间】:2020-03-14 17:14:16
【问题描述】:

对于我们的某些环境,我们已将 SQL 版本升级到 2017。我们正在做的是,我们将 SQL 2012 数据库备份并通过一些自动化脚本在 SQL 2017 上恢复它。当这些数据库从 SQL 2008 R2 迁移到 SQL 2012 时也是如此。但是我们数据库的兼容级别仍然是 2008 和 2012,因为基本上我们不会在迁移过程中更新数据库的兼容级别。唯一的原因是这些 SQL 版本之间的内存架构不同。

如果我们将数据库的兼容性从 2012 年或 2008 年升级到 2017 年,谁能帮助我了解可能产生的影响?为了将兼容性级别更改对我们环境的影响降至最低,我们是否必须启用/使用任何并行功能?

任何理解这一点的帮助将不胜感激。

【问题讨论】:

  • 文档中描述了差异,主要涉及功能、生成的执行计划和统计信息,而不是内存处理。至于内存架构的差异,你是什么意思以及你为什么关心?这是你应该关心的执行计划和统计数据

标签: sql-server database sql-server-2008 compatibility sql-server-2017


【解决方案1】:

在我的评论空间不足时添加作为答案:

我怀疑这个问题过于宽泛,无法提供全面的答案。最好的方法可能是简单地在测试环境中尝试更改,看看会发生什么。产生的影响在很大程度上取决于您的工作负载类型以及您使用的功能。

根据我的经验,从 2014 年之前的版本到后期版本时,在这些情况下最大的收获是基数估计器的更改。平均查询可能会变得更快,但您可能不会注意到,因为它解决的真正问题将被优化掉。另一方面,会有一些查询对您来说会变慢,您需要识别并修复它们。作为一个快速的短期修复,您可以使用提示OPTION (USE HINT ('FORCE_LEGACY_CARDINALITY_ESTIMATION'))

如果您使用的是 MERGE 语句,那么它们可能会开始引发错误,因为在查询本身死锁的地方可能会出现一些已知错误,我们必须切换到删除一些索引,然后再合并和重新构建它们一个大的 ETL 管道。

【讨论】:

    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多