【问题标题】:Changing SQL Server 2016 compatibility level to 2012将 SQL Server 2016 兼容级别更改为 2012
【发布时间】:2019-08-07 06:36:39
【问题描述】:

在我当前的项目中,我们使用的是兼容级别为 2012(110) 的 SQL Server 2016,我想将其更改为 2016。这是我的问题:

  • 此兼容性级别 (2012) 是否会失去性能改进?我如何证明这一点?
  • 过去,正如我的拼贴画所说,他们尝试过这个,但有些索引不起作用。有这样的风险吗?
  • 你有什么意见?值得一试吗?

最好的问候

【问题讨论】:

  • 旧版本的 sql server 中的某些功能在 sql server 2012 中已弃用但受支持,在 sql server 2016 中不再支持。查看每个版本的 sql server 的文档将是一个开始.比如这个:docs.microsoft.com/sv-se/sql/database-engine/… 某些索引不起作用是什么意思?它们无法创建、无法重建或性能不佳?
  • 正如他们所说,执行计划没有使用相同的索引,就像它们不存在一样。

标签: sql-server sql-server-2012 sql-server-2014 compatibility


【解决方案1】:

你有什么意见?值得一试吗?

是的, 但你应该在你的数据库中测试它。

Compatibility level表示新features使用+使用新cardinality estimator的可能性,第一个是好事,第二个取决于。

过去,正如我的拼贴画所说,他们尝试过这个和一些索引 没用。有这样的风险吗?

这意味着新的cardinality estimator 做出了不同的估计,因此计划不同并且没有使用某些索引。 这可能是好是坏,您应该比较execution time,而不是“索引使用情况”。 如果您发现某些查询的性能较差,您可以使用query hint 来使用query level 的旧基数估计器:

OPTION(QUERYTRACEON 9481)

您甚至可以在 server level 上启用旧基数估计器:

DBCC TRACEON(9481, –1)

启用此功能后,您将拥有所有旧计划,但仍可以使用 2016 年的新功能。

您可以在此处阅读有关基数估计器和相关提示的更多信息: SQL Server 2016 Upgrade Testing with the New Cardinality Estimator: Context Matters

【讨论】:

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