第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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql主从复制不同步案例_Mysql主从不同步问题处理案例

在使用Mysql的主从复制架构中,有两个比较头疼的问题:1、主从数据不同步后如何处理2、主从同步延迟问题如何解决本文将根据实际案例来分析下问题1,至于问题2多数文档介绍的办法是启用多线程复制来解决,言归正传,这里的问…

python3.6生成exe_Python 3.6打包成EXE可执行程序的实现

1、下载pyinstaller python 3.6 已经自己安装了pip,所以只需要执行 pip install pyinstaller就可以了2、打包程序 进入到你你需要打包的目录;比如我在H:\xcyk开始打包,执行pyinstaller xxx.py我们发现,竟然报错!&#…

opencvpython教程百度云资源_Python+OpenCV图像处理入门,视频教程下载

课程介绍: 李老师讲课生动、深入浅出,出版OpenCV编程案例详解、Python-OpenCV图穷录、MATLAB图像处理、MATLAB图像案例教程等在线课程。 本课程系统概括了Python-OpenCV的使用方法,让学习者快速入门。根据本课程规划的图书《Python-OpenCV图穷…

将结构体写入文件_将COCO检测结果写入json文件

最近很多朋友留言问我如何将检测结果写入json文件并且用于COCO API的评估,之前对于检测结果的格式已经做了简单的说明,这里提供一些简单的函数,直接调用将结果写入即可。用于COCO API测试的文件格式HUST小菜鸡:用于COCO API测试的…

js for循环_JS 函数的执行时机(深入理解6个6)

定时器:setTimeout()setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式提示: 1000 毫秒 1 秒。 提示: 如果你只想重复执行可以使用 setInterval() 方法。 提示: 使用 clearTimeout() 方法来阻止函数的执行。语法&#x…

OCLint+Xcode 代码规范利器

很多公司里面都会强调代码规范的问题,开发者也都知道代码规范的好处。可实际开发中往往因为各种原因使我们把它的优先级不知不觉中降低了。  这里向一个有代码追求和洁癖的程序猿推荐一个分析工具,它可以成为你重构代码或着review的基本规则 OCLint是一…

MySQL求类型为GX的平均积分_mysql基本操作

一、连接操作格式:mysql-h主机地址 -u用户名 -p用户密码例:连接到远程主机上的mysql假设远程主机的IP为:110.110.110.110用户名为root,密码为abcd123则键入以下命令:mysql-h110.110.110.110-uroot-pabcd123二、用户级操作1、selec…

k均值聚类算法优缺点_Grasshopper实现K均值聚类算法

本文很长很长,有很多很多图,包含以下部分:1.算法简介2.如何分类平面点3.如何分类空间点4.如何分类多维数据5.后记提醒:以下内容包括:智障操作,无中生友,重复造轮子 等1.算法简介k均值聚类算法&a…

fullgc频繁的原因_系统运行缓慢,CPU 100%,Full GC次数过多,这一招帮你全搞定

处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排…

WEKA “Detailed Accuracy By Class”和“Confusion Matrix”含义

原文 Summary (总结)Correctly Classified Instances(正确分类的实例) 45 90 %Incorrectly Classified Instances (错误分类的实例) 5 10 %Kappa …

es删除数据_面试官是怎么来考察你对ES搜索引擎的理解?

来源:http://1t.click/ZdY一. 面试官心理分析问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是…

一个分布式服务器集群架构方案

0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster&…

python数据预处理_Python数据预处理——缺失值、重复值

一、缺失值处理 isnull( ) 、fillna( ) 、dropna( )(1)查看缺失查看数据集缺失,返回每列的缺失个数 df.isnull().sum() 查看某字段有缺失的行 df[df.a.isnull()] 查看某字段每行的缺失情况:返回T/F:df.score.isnull() …

vb如何测试连接mysql_VB怎么连接访问Access数据库?

VB是我们常常会见到的一款可视化程序设计语言,它的功能十分强大,因此有很多人会使用它,但是有时候我们需要用到VB来连接Access数据库,但是却无从下手,那么VB怎么连接访问Access数据库呢?不懂的朋友请看以下…

textarea如何在文字后面_FLASH如何制作风吹文字的效果

使用动作补间动画可以制作各种各样的动态效果,树叶飘落、蝴蝶飞舞等。这里再使用引导层动画结合动作补间动画制作风吹文字飞起的效果。主要知识点:引导层动画、动作补间动画FLASH如何制作树叶飘落​jingyan.baidu.comFlash如何制作飞舞的蝴蝶​jingyan.b…

ef mysql 外键 一对一_EFCore-一对一配置外键小记2

前后两次遇到这样的错误:The property xx on entity type xxxx has a temporary value. Either set a permanent value explicitly or ensure that the database is configured to generate values for this property.多数情况下是表配置关系会出现这样的问题。我实…

矩阵快速幂 HDU3483

1 #include <iostream>2 #include <cstring>3 4 using namespace std;5 6 //矩阵大小上限7 const int SIZ100;8 int MOD;9 10 //矩阵大小为n*m&#xff0c;初始化全部为011 struct mat12 {13 int n,m;14 long long ar[SIZ][SIZ];15 mat()16 {17 …

哲学家就餐问题python_Python实现哲学家就餐问题实例代码

哲学家就餐问题&#xff1a; 哲学家就餐问题是典型的同步问题&#xff0c;该问题描述的是五个哲学家共用一张圆桌&#xff0c;分别坐在五张椅子上&#xff0c;在圆桌上有五个盘子和五个叉子&#xff08;如下图&#xff09;&#xff0c;他们的生活方式是交替的进行思考和进餐&am…

fpga摄像头模块_FPGA开源项目:双目测距(一)之双目图像采集显示以及图片保存...

1.简述这个项目是大三下学期暑假(也就是2019年8份)完成的&#xff0c;当时的视频效果已发布在bilibili上&#xff0c;这是我们的省级的科研立项&#xff0c;其实就我一个人负责完成。发布bilibili后很多人比较感兴趣&#xff0c;打算年初回学校完成毕设期间开源的&#xff0c;一…

github ssh 配置_Github远程仓库克隆更新本机,SSH协议免密操作配置和注意事项

Github远程仓库-克隆远程仓库到本机 【重点】目标如何克隆远程仓库到本机呢&#xff1f;小结下载项目的命令&#xff1a;git clone https://gitee.com/kekesam/sassweb777.git注意&#xff1a;1&#xff1a;它会自动创建本地仓库&#xff1b;2&#xff1a;它也会自动和远程仓库…