第16/24周 SQL Server 2014中的基数计算
大家好,欢迎回到性能调优培训。上个星期我们讨论在SQL Server里基数计算过程里的一些问题。今天我们继续详细谈下,SQL Server 2014里引入的新基数计算。
新基数计算
SQL Server 2014里一个增强是新的基数计算。上个星期你已经学到老基数计算有些限制,会生成错误的估计,这会导致不好的执行计划表现。截至SQL Server 2012,你一直在使用自SQL Server 7.0引入的基数计算。
当然,几年来也有很多问题被修正,但默认它们都没启用的——你需要启用SQL Server里指定的跟踪标志才可以使这些修正生效。用那个方法微软确保它们不会引入所谓的计划质量退化(Plan-Quality Regressions)。因此新的基数计算在SQL Server里是自SQL Server 7.0以来在那个领域的第一个重大改变。
新基数计算的目的是提高你执行计划的质量。但是当然,还是有情况你会看到计划的退化。因此对于你的工作负荷和指定查询,你要仔细评估下新基数计算是否可用。因此SQL Server 2014再次引入不同的跟踪标志,使用它们你可以影响查询优化器如何工作。
为了使用新基数计算,你的数据库必须设置数据库兼容级别(Database Compatibility Level)为120。当你从先前SQL Server版本还原或附加数据库,你的兼容级别会改变——因此查询优化器就不会用到新的基数计算。使用下面的查询你可以很容易得出在你SQL Server实例里,每个数据库的兼容级别:
1 SELECT name, compatibility_level FROM sys.databases 2 3 GO
如果在你面前有一个执行计划,你可以对SELECT运算符查看下它的属性窗口,看下CardinalityEstimationModelVersion属性值。70表示使用老的基数计算,120表示使用新的基数计算。
另外,SQL Server 2014提供下列2个新的跟踪标记:
- 2312
- 9481
使用2312跟踪标记你可以指出,你想使用SQL Server 2014新的基数计算(例如,当你想使用低于120的兼容级别)。如果你想回到老的基数计算,就可以使用9481跟踪标记。你可以在实例级别,会话级别,也可以通过QUERYTRACEON查询提示来设置这些跟踪标记。我们来看下面的例子,使用2312跟踪标记来强制使用新的基数计算。
1 SELECT * FROM Person.Person 2 OPTION (QUERYTRACEON 2312) 3 GO
新基数计算提供很多改变,可以带来更好的估计,更有可能带来更好的执行计划。微软已经对基数计算的下列领域进行了重写:
- 对于多列谓语的估计
- 如何处理自增键列问题
- 对JOIN谓语的估计
- 通过扩展事件的故障排除
如果你想了解这些改变的更多细节,我强烈推荐读下Joe Sack写的白皮书用SQL Server 2014基数计算优化你的查询计划(Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator)。 也可以阅读下SQL Server 2014里的针对基数估计的新设计(New Design for Cardinality Estimation)。
小结
在这1期的性能调优培训我给你概括介绍了SQL Server 2014引入的新基数计算。
这个月我们已经对SQL Server里的统计信息进行了非常深入的学习!在过去的4个星期里,我们看到它们对获得好性能的执行计划确实非常重要。从下个星期开始,第5个月的性能调优培训开始了,你会学习到SQL Server里的锁,阻塞和死锁(Locking, Blocking, and Deadlocking)。请继续关注!
围观PPT:
0907_16_SQL_Server_2014中的基数计算.rar
转载于:https://www.cnblogs.com/woodytu/p/4649101.html
第16/24周 SQL Server 2014中的基数计算相关推荐
- 如何通过数据库SQL Server 2014中的SQL日期格式化语句来转换出我们需要的日期格式化日期时间格式转换的教程方法
如何通过数据库SQL Server 2014中的SQL日期格式化语句来转换出我们需要的日期格式化日期时间格式转换的教程方法 作者:张国军_Suger 开发工具与关键技术:SQL Server 2014 ...
- SQL Server 2014中的混合云和Hekaton功能
介绍 (Introduction) Microsoft SQL Server 2014 is considered to be the first version that supports Hybr ...
- SQL Server 2014新特性——基数评估(白皮书阅读笔记)
基数评估 目录 基数评估 说明 基数评估准确的重要性 模型假设 启用新的基数评估 验证基数评估的版本 在迁移到新的基数评估前要测试 校验基数评估 偏差问题 需要手动处理的变化 避免因为新的CE造成性能 ...
- SQL Server 2014 SP1 通过补丁KB3058865提供更新,SP1一文便知
Microsoft SQL Server 2014 SP1 更新: SQLServer2014SP1-KB3058865-architecture-language.exe 安装完成后版本 12.0. ...
- SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引 @邀月
邀月 的数据库学习 http://www.cnblogs.com/downmoon/archive/2011/03/10/1980172.html SQL Server 2008中SQL应用系列及BI ...
- sql server 2014预览版发布
MSDN发布sql server2014预览版,如下图: SQL Server 2014新特性: 微软SQL Server部门主管Eron Kelly介绍,通过将交易处理放到内存中进行,新的SQL S ...
- 抢先体验SQL Server 2014 CTP1!
根据微软官方给出的消息,下一版本数据库平台SQL Server 2014将在今年年底发布,其中将包含表粒度级别的内存OLTP功能,而与其他内存数据库不同的是,这一功能将无需昂贵的硬件作为支持. 在本周 ...
- SQL Server AlwaysOn中的几个误区
SQL Server AlwaysOn中的几个误区 原文: SQL Server AlwaysOn中的几个误区 AlwaysOn自SQL Server2012之后已经发布很久了,最近我在给一些客户做咨 ...
- 浅析SQL Server数据库中的伪列以及伪列的含义
浅析SQL Server数据库中的伪列以及伪列的含义 原文:浅析SQL Server数据库中的伪列以及伪列的含义 本文出处:http://www.cnblogs.com/wy123/p/6833116 ...
最新文章
- 安装LPC55S69 MicroPython模块是遇到的CDC Interface驱动问题
- 远程教育中教师能力特点分析(转载)
- AA065VD数据线连接错位的现象及分析总结
- Ardino基础教程 2_LED闪烁实验
- mysql数据太大,如何导入_MySQL导入文件过大怎么办
- 在php中可以使用几种方法定义数组,PHP中数组定义的几种方法
- shape的各种获取、更改以及设置方式辨析
- java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
- echarts图使用tab和下拉切换
- Kubernetes-ReplicaSet(RS)(五)
- iptables: Resource temporarily unavailable.问题
- wxPython 资料链接
- matlab用dft对连续信号做谱分析,用 DFT 对连续信号进行谱分析的误差问题有哪些?...
- 简单理解下内存的几大区域
- 华为GaussDB:封装JDBC数据连接访问华为GaussDB数据库实现CRUD
- 【下载】无线电杂志上下册合集2006-2011
- 如何查看一个vs工程使用的vs版本是哪一个?
- MiniFly微型四轴学习与开发日志(三)
- Flume-----八种采集方案
- win 7 我的计算机,从“我的电脑”到“此电脑”,Win7/Win10为啥这么改?