有个语句最近性能下降很厉害,原本1秒就可以查询完毕的事情现在居然需要3-4分钟。

首先我的做法是先快速找出导致整个语句下降的元凶。在这个例子里面查询语句有3个JOIN字句,我通过删除某一个JOIN节点来观察执行时间是否出现本质的变化,这样我就找到了原来是包含了递归查询的视图导致了整个查询语句性能的下降严重。然后我运行了一遍查询语句获取真实的执行计划(图形)。通过执行计划我观察到属于递归查询的那一部分执行计划的节点每次都会输出非常大量的数据流,比如一个聚集索引扫描操作符输出的数据行数是真实表内数据行数数量的上百倍至少,对比这个视图单独执行是截然不同的结果。我的想法是为什么SQL SERVER笨到去选择这样的执行计划呢。显然这个包含递归查询的视图是最后一个JOIN字句。如果前面的JOIN字句都先完成后再进行最后一个JOIN,这样问题不就解决了。那么我尝试把视图单独拿出来,而前面的JOIN编程一个子查询(衍生表/独立子查询)再和包含递归查询的视图做JOIN。结果执行计划彻底改变。这个应该是一个典型的执行先后顺序导致性能下降的例子。解决方法是尝试隔离导致问题的视图,等其他的工作都完成后再和这个视图进行连接,观察变化。

SQL SERVER版本是 Microsoft SQL Server 2014 - 12.0.4100.1 (X64)

Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> 

SQL Server ->> 性能调优案例之 -- 包含递归查询的视图导致整个查询语句性能下降的更多相关文章

  1. 性能调优案例分享:jvm crash的原因 1

    性能调优案例分享:jvm crash的原因   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq: ...

  2. 性能调优案例分享:Mysql的cpu过高

    性能调优案例分享:Mysql的cpu过高   问题:一个系统,Mysql数据库,数据量变大之后.mysql的cpu占用率很高,一个测试端访问服务器时mysql的cpu占用率为15% ,6个测试端连服务 ...

  3. hbase性能调优案例

    hbase性能调优案例 1.人员-角色   人员有多个角色  角色优先级   角色有多个人员   人员 删除添加角色   角色 可以添加删除人员   人员 角色 删除添加   设计思路 person表 ...

  4. 必读,sql加索引调优案例和explain extended说明

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 昨天分享了Mysql中的 explain 命令,使用 explain 来分析 select 语句的运行效果,如 :expl ...

  5. SQL SERVER 跟踪调优书籍

    SQLServer监控和诊断 SQL SERVER 性能优化的艺术

  6. Oracle 性能调优案例(代码级别)

    业务案例一: 业务:千万记录表中查询出50条符合条件的记录. 现象:oracle部署时跨机器,业务取得数据耗时10ms.造成业务性能不达标. 为了突出主题,对于异常分支,均已省略. 对于通常写法, o ...

  7. 性能调优案例分享:jvm crash的原因 2

    3.core dump分析 有了core dump文件,接下来要做的就是通过命令去解析此文件,定位具体问题了,主要有以下三个命令: (1)先执行gdb $JAVA_HOME$/bin/java cor ...

  8. SQL Server索引调优系列

    http://www.cnblogs.com/chenmh/category/586612.html http://www.cnblogs.com/zhijianliutang/category/63 ...

  9. mysql性能调优与架构设计(一)商业需求与系统架构对性能的影响

    这里我们就拿一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计附加要求:实时更新 在很多人看来,这个功能非常容易实现,不就是执行一条SELECT COUNT(*)的Query 就可以得到 ...

随机推荐

  1. IDE神器intellij idea的基本使用 (转载)

    一.关于新建工程,导入工程,配置jdk,tomcat这里不做过多的讲述,必定网络上关于此类配置一堆一堆的. 二.编码快捷键(比较常用的快捷键)该套快捷键选择的是:Mac OS X 10.5+ 1. a ...

  2. hibernate3.3.2搭建Junit日志环境

    搭建好log4j日志环境后,再来搭建Junit测试环境: 测试代码放在另外一个目录下,项目右键,new一个source folder,源代码目录,放我们的测试代码,名字test.src放源代码. 比较 ...

  3. 【数组】Two Sum

    题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...

  4. WPF 自定义NotifyPropertyChanged

    该工具类实现INotifyPropertyChanged接口 /// <summary> /// 实现了属性更改通知的基类 /// </summary> public clas ...

  5. java多线程---------java.util.concurrent并发包----------等待多线程完成

    一.等待多线程完成的join的使用.CoundownLantch.CyclicBarrier .

  6. ThreadPoolExecutor 杂记

    When a new task is submitted in method execute(Runnable), and fewer than corePoolSize threads are ru ...

  7. session_start()导致history.go(-1)返回时无法保存表单数据的解决方法

    问题背景: 在填写完表单提交时,由于某个表单项可能填写的不合法,导致提交失败,返回表单页面.但返回后所有的表单都被清空了,重新填写比较麻烦,度娘解释说,是由于每个页面都调用了session_start ...

  8. python爬虫实战(七)--------伯乐在线文章(模版)

    相关代码已经修改调试成功----2017-4-21 一.说明 1.目标网址:伯乐在线 2.实现:如图字段的爬取 3.数据:存放在百度网盘,有需要的可以拿取 链接:http://pan.baidu.co ...

  9. BOM的节点方法和属性

    一.HTML DOM >>>>>>>>>>>>>>>>>>>>具体可以参考W3S ...

  10. 单源最短路(Dijkstra算法)

    #返回上一级 @Author: 张海拔 @Update: 2015-03-11 @Link: http://www.cnblogs.com/zhanghaiba/p/3514570.html Dijk ...