SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践
前言:自从上一篇文章发出之后,收到了很朋友的关注。很多朋友要求多多实践,而不是纯粹的理论。确实,从打算出这个系列开始,我就本着实践的思想来进行的!同时,为了使得大家更好的理解、消化这些知识,我会定期的就所写内容进行在线的视频讲座,朋友们可以去参与这个小组:http://www.agilesharp.com/c/sqlprofiler.aspx
报名活动开始啦:http://www.agilesharp.com/Event.aspx/T-2
议程如下:
实践概述
图形化执行计划实战
执行计划信息解读
实践概述
执行计划可以辅助我们写出高效率的T-SQL代码,同时也可以找出现有T-SQL代码的问题,还可以监控数据库!当然,最后如何使用执行计划还是取决于我们自己了,但是不管怎么样,我们首先学会解析执行计划中所包含的信息,最快的学习方法就是实践。下面,我们就从一个实践开始。
为了使得大家易于理解,这里的例子不会太复杂,随着课程的不断深入,后续的示例也会越来越复杂。同时,如果大家也想跟着一起动手实践,那么希望朋友们安装SQL2005或更高版本,同时记得安装AdventureWorks数据库。下载地址为:http://msftdbprodsamples.codeplex.com
另外,有一个需要注意的是,由于数据库中数据,操作和时间的关系,可能大家在运行脚本产生的执行计划和我这里不完全一样,这是没有任何问题的!
图形化执行计划实战
下面我们正式进入要讨论的话题。
首先,为了使得我们可以查看执行计划,最起码要确保我们在登录数据库的时候,要被授予权限,如下语句所示:
1.GRANT SHOWPLAN TO [username]
为了将讨论集中在执行计划(估计执行计划和实际执行计划)上,我们这里这是运行一个比较简单的查询,如下代码所示:
1.SELECT * FROM [dbo].[DatabaseLog];
下面,我们就来看看这个语句的估计执行计划,正如之前文章讲述的:估计执行计划是优化器使用了的元数据,成本分析算法等而产生的计划,这个计划是查询语句执前的一个分析!
显示估计执行计划
我们可以采用以下几种方式显示估计执行计划:
1. 点击Sql Server Studio工具栏上的按钮:
2. 在查询窗口右击鼠标,如下所示:
3. 使用快捷键“CTRL + L”.
对以上面的查询语句,显示的图形化的估计查询计划如下:
显示执行查询计划
与估计执行计划不同,实际的执行计划不是优化器产生的,实际的执行计划是底层的存储引擎在执行时候产生的,这个计划中包含了大量的实际的底层数据和相关的信息。
我们可以采用以下方式获得实际的执行计划,如下所示:
1. 点击工具栏上面的按钮:
2. 在查询窗口右击鼠标,如下:
3. 快捷键“CTRL + M”
上述查询的实际执行计划如下所示:
大家初一看,以为两者没有区别,但是它们包含的数据信息很多是不一样的。
下面,我们就开始对图形化的执行计划进行解读。
执行计划信息解读
刚刚大家已经看了图形化的执行计划了,相关大家比较关心的问题有两个:如何解读执行计划中提供的各种信息;如何采用执行计划来进行性能调优。
我们首先来看看第一个问题。
一般而言,我们在阅读图形化的执行计划的时候顺序是这样的:从右向左,从下往上。也就说:sql执行的第一步就显示在执行计划的右下角。
在图形化执行计划中的每一个图标,都表示一个操作,在之前的执行计划中就有两个操作。并且每个操作之前采用箭头连接起来,表明了数据流动的方向,其中箭头的粗细就反应了数据量的大小。
另外,在每个操作下面都显示了一个百分比。
对于估计执行计划而言,这个数字就是优化器对执行计划中每一个操作步骤进行成本分析后的结果。例外,在我们的例子中,整个查询最后会有两个操作会进行,Select和Table Scan,其中整个查询的成本将会落在Table Scan(整表扫描)上。
操作提示信息
当我们把鼠标放在每个操作或箭头上面的时候,就会弹出更多的相关信息,我们下面就来具体的看一看。
例如,当我们把鼠标放在执行计划的Select操作上面,显示如图:
上面图中给出的信息非常清楚了,我这里只是解释一下“估计子树大小”。因为执行计划可以看出是sql语句的逻辑执行步骤,这个选项就告诉我们:在我们现在所看的这个操作步骤以及后面的所有步骤的开销是多少,是一个总计数字。
如何朋友们还有有什么不清楚的,我们在后续将要展开的在线讲座中讲述!
下面我们看看Table Scan的提示信息,如下图所示:
虽然这个操作中包含的信息就非常的多了,但是却都很容易理解。
这里要稍微重点提一下就是“已排序”。很明显,这个值告诉我们:Table Scan这个操作是建立在对数据排序的基础上的。例如,在查询语句中,有时候,我们写上order by语句,那么后续的很多的操作都是在已经排序的数据基础上进行,通过查看“已排序”是true还是false,我们就可以知道,查询语句内部是否自己进行了额外的排序操作(有时候,我们明明没有写order by,但是优化器却认为进行order by之后成本更小,这个时候我们就要注意了)。
最后稍微的提一下“节点ID”,这个值就反应了操作在整个执行计划中的执行顺序,数字越小,说明越早被执行。在上图中,表明table scan操作时整个执行计划的第一步。
为了使得大家更加的清楚,下面我们把之前的查询语句稍微的改下:
1.SELECT * FROM [dbo].[DatabaseLog] order by PostTime
估计执行计划如下:
我们查看提示信息,发现排序最先进行,然后再整表扫描。
文章首发站点:www.agilesharp.com IT创业产品互推平台
今天就暂时到这里,下一篇,我们讲述相关的操作以及以文本和xml的形式查看执行计划。
报名活动开始啦:http://www.agilesharp.com/Event.aspx/T-2
posted @ 2011-09-05 10:30 小洋(燕洋天) 阅读(2277) 评论(8)
编辑
IT草根的江湖之路之七: 挑战,刚刚开始
前言:真实世界中的事情往往不是我们想象那么简单的,软件项目的复杂的业务也不是市面上的什么”精通,企业级”之类书籍能够讲述明白的。不要以为管理系统就是数据增删改查,不要以为数据相差零点零几就没有什么。
你要清楚:作为一个开发人员,你最值得骄傲的是什么,职业操守是什么。
这里有一点需要的明白的是:公司为什么请你?说的直接一点,公司不是慈善机构,公司就是花钱请你来为她做事,创造价值的,一个不能创造价值的员工,公司会留你吗?
终于等到了上班的那天,我对任何人都珍惜今天的这个机会,因为没有人知道,在此之前,我经历了怎样的艰辛。
Leader给了我系统的整个数据字典(所有数据库表的图),说了一句:“理解所有表的关系,下午我给你讲讲系统的业务背景”。
看到这里,有一点要告诉大家的是:不要再天真的以为公司会花几个星期,几个月的事情,让你慢慢的熟悉业务,熟悉相关的知识,一切要靠自己去快速的领悟与消化,这是一个“物竞天择,能者居之”的社会,不是没有谁就不行。
说道这里,打个岔!同时这里给刚刚毕业或者踏入整个行业的朋友们提个醒:不要再以自己大学多么有名而骄傲,也不要再因为自己以前的成绩多么的好而得以。一个人的学习能力就决定了他以后发展的深度和广度。胸怀决定发展的高度!
不要再以为有人会像老师那样一行行的解释代码是什么意思,不要以为你是新人,犯错就是“理所当然”。No excuse!
在公司,我是最小的,周围都是有几年工作经历的同事,还有四十多岁的。如果公司要裁人(在中国it),那么新人和年纪很大的就是目标群体(在你没有核心竞争力和很好的人缘之前),新人是最大的目标!压力!
毕竟自己从大二就开始在外面兼职和实习,这点觉悟还是有的。所以,接到这第一个任务之后,自己开始行动起来。
面对上百张数据表,无疑是个负责的蜘蛛网,怎么办?那就得看你如何处理了。如果说,你要找人帮忙,也得“察言观色”。下面,我们就细细说来。
首先说如何理解上百张表,无疑,从系统的功能入手时最快速的。系统的功能一般是分模块实现的,那么表势必和相关的功能挂钩,那么把表按照功能划分来看,就很方便了。
所以这里就告诫朋友们一点:要学会逆向思维。一直做项目的时候,总是先设计功能,让后设计表,是吧!现在反推,从表到功能,再回到表,就能够把问题变得简单一点!不要以为这很简单,我这里只是一个简单的例子而已,如果问题更加复杂,怎么办?!
因为我是新人,计算机的权限有限,很多的资源都不能访问,也没有开通查看代码的权限。但是,我现在需要可以运行的系统来帮助我,怎么办?
那么就涉及到第二个问题,如何找人帮忙?
不要傻不拉几的一上去就随便找个人,然后开口说:“帮我一下“!要知道,人家凭什么帮你?人家有事情要忙吗?这个世界没有谁帮助谁是理所当然的!感激帮助过你的朋友和亲人吧!
所以,要学会“察言观色“,这里不是贬义词!做人要灵光点!
首先,最好请示leader,问他是否有时间?态度要好!如果没有,那么就要问他,除了他还有谁可以问。
当问另外一个人的时候,首先要观察这个人是不是忙的那种不可开交的样子,如果是,那么,现在最好不要问,而是自己再次评估一下,如果要找人帮忙,估计要花人家多长的时间?如何估算,这就是个人的本事了,呵呵!我这里暂且不说,免得又朋友说“你不说,我也知道“ !呵呵!
然后,等自己这边时间也估计好之后,然后态度很好的告诉你需要寻求帮助的人:“可以打扰你几分钟吗“,然后,你就告诉他,你需要系统的一个可以运行的版本! 如果人家没有时间,不要退缩,你就要追问,估计什么时候可以有时间,是否有文档,先让自己熟悉下。然后你就到那个点在再去问,不要忘记,随时注意态度!
不管如何,不要靠指望别人,要靠自己的一些经验或相关文档,尽力的理解。一句话,用心的,带着脑子做事情!
首发站点:www.agilesharp.com IT创业产品互推平台
下一篇:上阵,职业操守
posted @ 2011-09-05 08:56 小洋(燕洋天) 阅读(2290) 评论(4)
编辑