随笔分类 -  04.统计信息

Statistics
摘要:在我查询调优期间,STATISTICS IO会话选项是我的朋友,因为对于指定的查询,它准确告诉你有多少页已读取。每次,SQL Server从缓存池骑牛一个8K的页,它通过STATISTICS IO的输出获得记录。 通常我会建议启用STATISTICS IO来更好的理解在给定的查询里,涉及的表上有多少 阅读全文
posted @ 2017-08-26 15:02 Woodytu 阅读(1467) 评论(2) 推荐(1) 编辑
摘要:UNIQUEIDENTIFIER列上的统计信息非常有意思,在它上面有一些很令人讨厌的行为。我们来看下。问题重现(The repro)为了向你展示我们刚抱怨的行为,我用下列简单的表定义创建了一个数据库,我在UNIQUEIDENTIFIER列上强制主键约束。这意味着SQL Server在后台会生成唯一聚... 阅读全文
posted @ 2015-08-15 08:16 Woodytu 阅读(932) 评论(0) 推荐(0) 编辑
摘要:今天的文章里我想谈下SQL Server里非常普遍的问题:如何处理用自增长键列的统计信息。我们都知道,在SQL Server里每个统计信息对象都有关联的直方图。直方图用多个步长描述指定列数据分布情况。在一个直方图里,SQL Server最大支持200的步长,但当你查询的数据范围在直方图最后步长后,这... 阅读全文
posted @ 2015-07-23 10:07 Woodytu 阅读(1000) 评论(0) 推荐(1) 编辑
摘要:在今天的文章里我想谈下基数计算里的一个特定问题:在查询谓语里相关列的基数计算。首先我们看下在SQL Server 7.0起的操作方法,最后我们详细看下SQL Server 2014里,在查询期间,处理相关列基数计算的全新实现方式。什么是相关列(Correlated Columns)在我们进入问题细节... 阅读全文
posted @ 2015-07-19 21:23 Woodytu 阅读(1115) 评论(2) 推荐(0) 编辑
摘要:对于SQL Server数据库来说,性能一直是一个绕不开的话题。而当我们去分析和研究性能问题时,执行计划又是一个我们一直关注的重点之一。我们知道,在进行编译时,SQL Server会根据当前的数据库里的统计信息,在一定的时间内,结合本机资源,挑选一个当前最佳的执行计划去执行该语句。那么数据库分析引擎... 阅读全文
posted @ 2015-07-16 10:15 Woodytu 阅读(1001) 评论(1) 推荐(0) 编辑
摘要:大家好,欢迎回到性能调优培训。上个星期我们讨论在SQL Server里基数计算过程里的一些问题。今天我们继续详细谈下,SQL Server 2014里引入的新基数计算。新基数计算SQL Server 2014里一个增强是新的基数计算。上个星期你已经学到老基数计算有些限制,会生成错误的估计,这会导致不... 阅读全文
posted @ 2015-07-15 18:35 Woodytu 阅读(1279) 评论(0) 推荐(0) 编辑
摘要:大家好,欢迎回到性能调优培训。在上2个星期,你已经学过了统计信息,它们为什么重要,还有在SQL Server里它们是什么样的。在这期性能调优培训里我想谈下当前基数预估含有的局限性,还有如何应用不同新技术来克服这些局限。基数预估错误上个星期你就看到,当执行计划被编译时,SQL Server使用直方图和... 阅读全文
posted @ 2015-07-09 08:22 Woodytu 阅读(803) 评论(0) 推荐(1) 编辑
摘要:基数预估是SQL Server里一颗隐藏的宝石。一般而言,基数预估指的是,在查询编译期间,查询优化器尝试找出在执行计划里从各个运算符平均返回的行数。这个估计用来驱动计划本身生成并选择正确的计划运算符——例如像Nested Loop, Merge Join,还是Hash Join的物理连接。当这些估计... 阅读全文
posted @ 2015-07-03 18:28 Woodytu 阅读(1022) 评论(0) 推荐(2) 编辑
摘要:欢迎回到性能调优培训。今天我想详细谈下统计信息在SQL Server内部是如何呈现的。假设有这样的问题:执行计划里的某个运算符的估计行数是42,但你知道对于这个查询,42不是正确的答案。但是你怎么来解读统计信息来理解这个估计是从哪里来的?我们来谈论下直方图(Histogram)和密度向量(Densi... 阅读全文
posted @ 2015-07-02 08:55 Woodytu 阅读(1500) 评论(0) 推荐(0) 编辑
摘要:欢迎来到性能调优培训的第4个月。这个月全是关于SQL Server里的统计信息,还有它们如何帮助查询优化器生成足够好的执行计划。统计信息主要是被查询优化器用来估计查询返回的行数。它只是个估计,没别的。统计信息概述SQL Server使用在统计信息对象里称作直方图(Histogram)的东西,它描述了... 阅读全文
posted @ 2015-06-25 09:33 Woodytu 阅读(1424) 评论(2) 推荐(2) 编辑
摘要:有个问题:在执行计划里运算符的估计行数是42,但是你知道查询的正确行数不是42。你也听说了SQL Server使用统计信息来作此估计的?但我们怎么看懂统计信息,来理解这里的估计是怎么来的?今天我想谈下SQL Server里的统计信息,在直方图(histogram)和密度向量(density vect... 阅读全文
posted @ 2015-06-06 12:48 Woodytu 阅读(3165) 评论(2) 推荐(3) 编辑
摘要:在帮助优化器选择正确的执行计划,统计信息是一个重要因素。因此,我们在处理性能问题时,要足够重视统计信息。可能是对统计信息知识及其相关机制的缺乏,忽略统计信息往往是造成性能问题的根源。查询优化器在每一步使用统计信息判断返回的行数。在执行计划里的预估行数信息是基于列上的可用统计信息计算而来的。统计信息会... 阅读全文
posted @ 2015-05-22 15:18 Woodytu 阅读(1241) 评论(0) 推荐(3) 编辑
摘要:在 理解统计信息(4/6):自动更新统计信息的阀值——人为更新统计信息的重要性里,我们讨论了自动更新统计信息的阀值,这个阀值在某些情况下,基于自动更新的统计信息还是可以获得最优的执行计划的。在大多数情况下,人为更新统计信息可以获得更好的性能。这个文章,我们可以来看下如何检测过期的统计信息。在SQL ... 阅读全文
posted @ 2015-05-22 14:41 Woodytu 阅读(1297) 评论(0) 推荐(4) 编辑
摘要:在理解统计信息(3/6):谁创建和管理统计信息?在性能调优中,统计信息的作用里我们讨论了统计信息的自动创建和自动更新。我们真的需要人为维护统计信息来保持性能最优?答案是肯定的,这取决与你的工作量。SQL Server只在达到阀限值时进行统计信息的自动更新。当大量的Insert/Update/Dele... 阅读全文
posted @ 2015-05-22 11:32 Woodytu 阅读(1981) 评论(0) 推荐(4) 编辑
摘要:在理解统计信息(2/6):直方图中,我们讨论了直方图,密度向量,还有SQL Server如何用统计信息做基数计算(cardinalityestimation)。这篇文章会讨论统计信息如何被创建,还有统计信息在性能调优中的重要性。有2类统计信息,索引统计信息和列统计信息。索引统计信息是索引创建的一部分... 阅读全文
posted @ 2015-05-21 18:13 Woodytu 阅读(1309) 评论(0) 推荐(1) 编辑
摘要:在理解统计信息(1/6):密度向量里,我们讨论了在统计里存储的密度向量信息。这篇文章会讨论下直方图。我们再次创建SalesOrderDetail表的副本,并在上面建立2个索引。1 USE StatisticsDB2 GO3 SELECT * INTO SalesOrderDetail FROM Ad... 阅读全文
posted @ 2015-05-21 10:44 Woodytu 阅读(2390) 评论(0) 推荐(3) 编辑
摘要:在日常生活中,我们用统计信息来采取决定。SQL Server优化器也用同样的方式,使用统计信息来选择正确的执行计划。如果统计信息错误或过期,SQL Server可能就会选择错误的执行计划。在这个文章里,我们换个方式理解下统计信息。查询优化器使用统计信息来判断每一步返回的行。执行计划里的估计行数信息是... 阅读全文
posted @ 2015-05-20 18:43 Woodytu 阅读(2592) 评论(1) 推荐(3) 编辑