2

在我们的生产环境中,我们有几台带有SQL server 2012 SP2+Windows Server 2008R2. 3 个月前,我们将所有服务器迁移到SQL Server 2014 SP1+Windows Server 2012 R1. 我们创建了具有新配置的新服务器(更多 RAM、更多 CPU、更多磁盘空间)并从SQL Server 2012--> 恢复到新SQL Server 2014服务器备份我们的数据库。恢复后,我们将兼容性级别从 110 更改为 120+Rebuild Index+Update 统计信息。

但是现在我们遇到了一些问题,当兼容性级别为 120 时,这些查询运行速度非常慢。如果我们将兼容性级别更改为旧的 110,它运行速度非常快。

我搜索了很多关于这个问题,但没有找到任何东西。

4

1 回答 1

4

SQL Server 2014引入新的基数估计器

SQL Server 2014 的性能改进之一是对基数估计的重新设计。进行基数估计(CE)的组件称为基数估计器。它是用于生成查询计划的 SQL 查询处理器的基本组件。基数估计是对最终行数和中间结果(例如连接、过滤和聚合)的行数的预测。这些估计对连接顺序、连接类型等计划选择有直接影响。在 SQL Server 2014 之前,基数估计器主要基于 SQL Server 7.0 代码库。SQL Server 2014 引入了新的设计,新的基数估计器基于对现代工作负载的研究和从过去的经验中学习。

跟踪标志9481并可2312用于控制使用哪个版本的基数估计器。

检查导致问题的查询并比较执行计划属性估计的行数与2008 年和 2014 年的实际行数值。

Microsoft SQL Server 2014 中的基数估计


您可以在SQL Server 2016+不使用跟踪标志或将数据库兼容级别更改为 110 的情况下为每个数据库设置旧的基数估计器。

更改数据库范围的配置

此语句允许在单个数据库级别配置多个数据库配置设置,独立于任何其他数据库的这些设置。

LEGACY_CARDINALITY_ESTIMATION = { 开 | 关闭 | 基本的 }

使您能够将查询优化器基数估计模型设置为SQL Server 2012独立于数据库兼容级别的早期版本。这相当于Trace Flag 9481. 要在实例级别进行设置,请参阅跟踪标志 (Transact-SQL)。要在查询级别完成此操作,请添加QUERYTRACEON查询提示。

将查询优化器基数估计模型设置为 SQL Server 2012 和更早版本的基数估计模型。

离开

根据数据库的兼容级别设置查询优化器基数估计模型。

ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = ON;
于 2015-08-21T10:58:42.203 回答