一个典型的多表参与连接的复杂SQL调优(SQL TUNING)引发的思考
今天在看崔华老师所著SQL优化一书时,看到他解决SQL性能问题的一个案例,崔华老师成功定位问题并进行了解决。这里,在崔华老师分析定位的基础上,做进一步分析和推理,以便大家一起研究探讨,下面简述该案例场景。
1、发生性能问题的SQL语句:
cu
--注:
1)十几张表参与连接的较复杂SQL语句。
2、发生性能问题的执行计划:
--注:
1)计划中节点19在表S_EVT_ACT上发生了FTS,据说该表上有700多W的数据量。
2)计划中节点34在表S_ACT_EMP上发生了index range scan(索引范围扫描)。
3、不存在问题的执行计划:
--注:
1)计划中节点23在表S_EVT_ACT上走了index unique scan(唯一索引扫描)。
2)计划中节点19在表S_ACT_EMP上走了index range scan(索引范围扫描)。
4、分析:
1)性能问题解决前,计划中节点19在S_EVT_ACT上发生了FTS;节点34在表S_ACT_EMP上发生了index range scan。
2)性能问题解决后,计划中节点23在S_ECT_ACT上发生了index unique scan,且由原来的节点19推后到节点23;节点19在表S_ACT_EMP上发生了index range scan,访问方式与性能问题解决前没发生变化,而为之由原来的节点34被推前到节点19。
3)对比性能问题解决前后,有两个变化,一个是表S_EVT_ACT由原来的FTS变为index unique scan,且为之被推后;另一个是表S_ACT_EMP为之被推前。变化的原因是optimizer_mode有原来的first_rows_10变为all_rows。
4)针对前面讲到的,性能问题解决前后的两个变化,我们讨论下变化的起因和作用。性能问题解决前,因为optimizer_mode设置为first_rows_10,那么,CBO在这个模式下,面对这种比较复杂的多表连接的SQL语句,不会逐个去查询和计算每个参与连接的表的统计信息和成本,而是给出一个粗略评估的结果或默认值,为什么会这样,大家自己思考吧,其实,即使按照这个方法,也未必就一定出现性能问题,因为这种模式下,求的是反应速度,如果表S_EVT_ACT和其他表的连接字段的匹配性足够好,那么,也能达成反应速度最优的效果,这里,问题不在于走了FTS,而是在于表S_EVT_ACT连接字段的匹配性,可这种模式下,CBO不可能得出这个匹配性的准确结果的。因此,这是个非常冒险的决定,可这种模式就是这样,没办法。此外,针对表S_ACT_EM上index range scan在设置为all_rows模式后被推前,这个是无论如何都是应该的,大家看看这个SQL语句就明白了,只是在first_rows_10模式下,CBO发生了错误评估而已,这一点,也许也是影响性能的重要因素之一。
5)由此可见,all_rows_X模式下,尤其是x比较低时,复杂的SQL语句就要小心了,也许,这个模式更适用于oltp业务,而不是olap业务。
个人之见,仅供参考。
注:本文素材来自崔华老师所著SQL优化一书。
一个典型的多表参与连接的复杂SQL调优(SQL TUNING)引发的思考的更多相关文章
- 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)
前几天,一个用户找到我,说查一个小表的时候非常慢,我问有多慢,他说最快也得半个小时才能出结果,有时干脆不出结果,我说小表多大,他说就几十兆,有点疑惑,让他帮忙获取了相关信息,一看就明白了,原来所谓的小 ...
- 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优
1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...
- Linux 系统TCP连接内存大小限制 调优
系统TCP连接内存大小限制 TCP的每一个连接请求,读写都需要占用系统内存资源,可根据系统配置,对TCP连接数,内存大小,限制调优. 查看系统内存资源 记录内存 详情:cat /proc/meminf ...
- Oracle SQL调优之表设计
在看<收获,不止sql优化>一书,并做了笔记,本博客介绍一下一些和调优相关的表比如分区表.临时表.索引组织表.簇表以及表压缩技术 分区表使用与查询频繁而更新数据不频繁的情况,不过要记得加全 ...
- 硬吃一个P0故障,「在线业务」应该如何调优HBase参数?
1.背景 由于种种原因,最近将核心业务生产使用的HBase迁移到了云上的弹性MapReduce(EMR)集群上,并使用了EMR的HBase组件默认参数配置. 结果在流量高峰期出现了宿主机故障,挂掉了两 ...
- SQL调优--记一次表统计信息未及时更新导致查询超级慢
某日同事丢给我一个看上去复杂的查询(实际就涉及两张表,套来套去)说只是换了日期条件,但一个查询5秒出数据,一个根本查不出来.现在整理下解决过程,及涉及的知识点. 若有不正之处, ...
- 一个SQL调优/优化(SQL TUNING)“小把戏”“哄得”小朋友挺满意
前几天,去一个用户那里,解决完问题,和一个小朋友闲聊,他有点愁眉不展.郁郁寡欢的样子,似乎没心情和我说话,之前,他的话是最多的,见此状,我就问:怎么了?小朋友?,他说,这几天应用人员说他的某个模块的性 ...
- (转)WebSphere 中池资源调优 - 线程池、连接池和 ORB
WebSphere 中池资源调优 - 线程池.连接池和 ORB 来自:https://www.ibm.com/developerworks/cn/websphere/library/techartic ...
- 一个典型案例为你解读TDSQL 全时态数据库系统
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯技术工程官方号发表在腾讯云+社区 经典案例 增量抽取.增量计算等都是T-TDSQL的经典案例.如下以增量计算为例,来分析T-TDS ...
随机推荐
- CentOS6.5下安装配置MySQL数据库
一.MySQL简介 说到数据库,我们大多想到的是关系型数据库,比如MySQL.Oracle.SQLServer等等,这些数据库软件在Windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...
- springmvc处理过程理解(一)
DispatcherServlet前端控制器:接收request,进行response HandlerMapping处理器映射器:根据url查找Handler.(可以通过xml配置方式,注解方式) H ...
- hashtable详解
hashtable也比称作哈希表,键值对或者关联数组 1. 先引用using System.Collections;命名空间 用于处理和表现key/value的键值对,其中key通常用来快速查找,同时 ...
- 力扣(LeetCode)976. 三角形的最大周长
给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的.面积不为零的三角形的最大周长. 如果不能形成任何面积不为零的三角形,返回 0. 示例 1: 输入:[2,1,2] 输出:5 示例 2 ...
- Lua面向对象之三:其它一些尝试
1.尝试一:子类对象调用被覆盖了的父类函数 根据元表设置流程,我们只有将父类元表找到就能调用父类的方法了 ①在子类Circle中增加一个调用父类方法的函数 --调用父类被子类覆盖了的name方法 fu ...
- spring boot: 支持jsp,支持freemarker
spring boot: 支持jsp,支持freemarker 支持jsp: 加入依赖 <!--jsp--> <dependency> <groupId>org.a ...
- English trip Spoken English & Word List(updating...)
Word List 词汇 Square 英 [skweə] 美 [skwɛr] adj. 平方的:正方形的:直角的:正直的. 使成方形:与…一致 vi. 一致:成方形 n. 平方:广场:正方形 ...
- 将内网ip映射到外网域名
一.应用场景 1.在本地测试微信支付回调 二.如何使用natapp实现内网穿透 1.第一步注册账号并进行实名制认证 natapp网站地址 https://natapp.cn/ 2.第二步申请免费隧道 ...
- 使用C#读取网站相对路径文件夹下所有图片
public JsonResult GetCourseInitCover() { //设置相对路径 string imgurl = Server.MapPath("~/Content/ima ...
- android ------ Emulator: error: x86 emulation currently requires hardware acceleration
我创建 Android 模拟器,运行项目时出现了一个这样的错误: 如下: emulator ERROR:x86 emulation currently requires hardware accele ...