设为首页 收藏本站
查看: 670|回复: 0

[经验分享] SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践

[复制链接]

尚未签到

发表于 2015-6-29 13:43:31 | 显示全部楼层 |阅读模式
  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工具栏上的按钮:  

  
http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=7  
  
  2.  在查询窗口右击鼠标,如下所示:

  
http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=8  
  
  
             3.  使用快捷键“CTRL + L”.

      对以上面的查询语句,显示的图形化的估计查询计划如下:



http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=9  
  
显示执行查询计划

       与估计执行计划不同,实际的执行计划不是优化器产生的,实际的执行计划是底层的存储引擎在执行时候产生的,这个计划中包含了大量的实际的底层数据和相关的信息。

       我们可以采用以下方式获得实际的执行计划,如下所示:

            1.  点击工具栏上面的按钮:



http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=10  
  
            2.  在查询窗口右击鼠标,如下:



http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=11  
  
            3.  快捷键“CTRL + M”

      上述查询的实际执行计划如下所示:



http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=12  
  
         大家初一看,以为两者没有区别,但是它们包含的数据信息很多是不一样的。

        下面,我们就开始对图形化的执行计划进行解读。

      

执行计划信息解读

         刚刚大家已经看了图形化的执行计划了,相关大家比较关心的问题有两个:如何解读执行计划中提供的各种信息;如何采用执行计划来进行性能调优。


         我们首先来看看第一个问题。


         一般而言,我们在阅读图形化的执行计划的时候顺序是这样的:从右向左,从下往上。也就说:sql执行的第一步就显示在执行计划的右下角。

         在图形化执行计划中的每一个图标,都表示一个操作,在之前的执行计划中就有两个操作。并且每个操作之前采用箭头连接起来,表明了数据流动的方向,其中箭头的粗细就反应了数据量的大小。


         另外,在每个操作下面都显示了一个百分比。


        对于估计执行计划而言,这个数字就是优化器对执行计划中每一个操作步骤进行成本分析后的结果。例外,在我们的例子中,整个查询最后会有两个操作会进行,Select和Table Scan,其中整个查询的成本将会落在Table Scan(整表扫描)上。


操作提示信息

         当我们把鼠标放在每个操作或箭头上面的时候,就会弹出更多的相关信息,我们下面就来具体的看一看。

         例如,当我们把鼠标放在执行计划的Select操作上面,显示如图:



http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=13  

        上面图中给出的信息非常清楚了,我这里只是解释一下“估计子树大小”。因为执行计划可以看出是sql语句的逻辑执行步骤,这个选项就告诉我们:在我们现在所看的这个操作步骤以及后面的所有步骤的开销是多少,是一个总计数字。

         如何朋友们还有有什么不清楚的,我们在后续将要展开的在线讲座中讲述!

        

         下面我们看看Table Scan的提示信息,如下图所示:



http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=14  
  
        虽然这个操作中包含的信息就非常的多了,但是却都很容易理解。

        这里要稍微重点提一下就是“已排序”。很明显,这个值告诉我们:Table Scan这个操作是建立在对数据排序的基础上的。例如,在查询语句中,有时候,我们写上order by语句,那么后续的很多的操作都是在已经排序的数据基础上进行,通过查看“已排序”是true还是false,我们就可以知道,查询语句内部是否自己进行了额外的排序操作(有时候,我们明明没有写order by,但是优化器却认为进行order by之后成本更小,这个时候我们就要注意了)。


       最后稍微的提一下“节点ID”,这个值就反应了操作在整个执行计划中的执行顺序,数字越小,说明越早被执行。在上图中,表明table scan操作时整个执行计划的第一步。


      为了使得大家更加的清楚,下面我们把之前的查询语句稍微的改下:




1.SELECT * FROM [dbo].[DatabaseLog] order by  PostTime

      估计执行计划如下:



http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=15  
  
  我们查看提示信息,发现排序最先进行,然后再整表扫描。

  
http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=16  
  
      文章首发站点:www.agilesharp.com IT创业产品互推平台

      今天就暂时到这里,下一篇,我们讲述相关的操作以及以文本和xml的形式查看执行计划。

报名活动开始啦:http://www.agilesharp.com/Event.aspx/T-2

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81516-1-1.html 上篇帖子: 配置 SQL Server 2005 远程调试存储过程 下篇帖子: SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表