【问题标题】:SQL Server 2014 - some queries very slow (cardinality estimator)SQL Server 2014 - 一些查询非常慢(基数估计器)
【发布时间】:2015-11-15 06:55:03
【问题描述】:

在我们的生产环境中,我们有几台带有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+重建索引+更新统计信息。

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

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

【问题讨论】:

    标签: sql sql-server tsql sql-server-2014 cardinality-estimation


    【解决方案1】:

    SQL Server 2014 介绍new cardinality estimator

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

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

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

    Cardinality Estimates in Microsoft SQL Server 2014


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

    ALTER DATABASE SCOPED CONFIGURATION

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

    LEGACY_CARDINALITY_ESTIMATION = { 开 |关闭 |主要}

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

    开启

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

    关闭

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

    ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = ON;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多