MSSQL性能调优--执行计划

楼主
我是社区第98306位番薯,欢迎点我头像关注我哦~
在做报表的过程中,经常会遇到各种性能问题,有时报表打不开,有时报表占用资源过多导致服务器宕机,这些都属于性能问题,面对这些问题,该怎么处理呢? 性能调优!!!
在MSSQL中,查看较慢语句的执行计划,就是一个比较直观的方式,
如果查看执行计划呢:

file:///C:/Users/qiaok/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png
1.从右到左,从上到下的顺序阅读执行计划
2.执行计划中每个图标代表一个运算符,总开销为100%
3.数据从右向左在两个操作符之间流动,由一个连接箭头表示。
4.操作符之间连接箭头的宽度是传输行数的图形表示。
5.同一列的两个操作符之间的连接机制将是嵌套的循环连接,Hash    匹配或者合并连接。


1.  识别执行计划中开销较大的步骤

a.  关注较高开销的节点,一般是表扫描、假脱机、排序等运算(如上列中的排序)
file:///C:/Users/qiaok/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
b.查看节点之间连接箭头的宽度。
     箭头的宽度代表传输的数据量大小。
     分析箭头左边的节点为什么需要这么多行,是否可以过滤。
     检查箭头的属性,实际的行与估计的行相差很大可能是统计信息过时。
    c.寻找hash连接操作。对于小的结果集,嵌套的循环连接通常是首选的连接 技术。

   d.寻找书签查找操作。大结果集的书签操作可能造成大量的逻辑读。
e.寻找执行排序操作的步骤。这表明数据没有以正确的排序进行检索。



2.  分析索引有效性
a.数据检索操作   
    通过查看执行计划中该表的数据检索机制,来判断对该表的查询是否高效。         
1.   查找优于扫描。
    file:///C:/Users/qiaok/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png
2.   RID查找与键查找
键查找优于rid查找,建议对表都加上聚集索引
file:///C:/Users/qiaok/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
3.  分析连接有效性
  a. Hash连接
       file:///C:/Users/qiaok/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png
      Hash连接有两个输入—建立输入和探查输入。较小数据量的做为建立输入。
      在建立阶段,建立输入被扫描或计算,并在内存中建立hash表,每个行根据计算的hash键值被插入的hash表元中。
      在探查阶段,对于每个探查行计算hash键值;与hash表元进行匹配。

  b. 合并连接
file:///C:/Users/qiaok/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png
       如果连接输入列上已经排序,优化器会为其选择合并连接,合并连接比  Hash匹配更快。
      查询优化器使用hash连接高效处理大的、未排序、没有索引的输入。

  c.嵌套循环连接
      file:///C:/Users/qiaok/AppData/Local/Temp/msohtmlclip1/01/clip_image009.png
      嵌套循环连接使用一个连接作为外部输入表,另一个作为内部输入表。
外部循环逐行扫描外部输入表,内部循环为每一个外部行执行一次,搜索匹  配行。
如果外部输入数据量较小,内部输入大但有索引,嵌套循环连接时非常有效的。


编辑于 2017-11-29 15:10  
分享扩散:

沙发
发表于 2017-11-29 15:13:25
多年地产行业报表开发&性能调优经验,欢迎加Q交流:898164042
板凳
发表于 2017-11-29 15:42:56
地板
发表于 2017-11-29 16:04:45
5楼
发表于 2017-11-29 16:11:13
贴图能清晰点就好了
6楼
发表于 2018-2-1 13:53:19
好好学习,天天向上
7楼
发表于 2018-3-5 22:46:35
贴图能清晰点就好了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表