遇到执行效率低下的SQL语句,对于DBA而言无疑是家常便饭了,但如何快速优化,把它变成小菜一碟,则得看看咱们DBA+社群联合发起人卢飞的经验之谈了。

专家简介

卢飞

DBA+社群联合发起人

Oracle 10g OCP,6年Oracle数据库维护经验,对Oracle数据库管理、数据迁移,性能优化有着丰富的实战经验。目前专注于数据库技术及自动化运维方面的研究。

在DBA的工作中,SQL优化的工作量占工作很大的一块,我们在平时工作中也是这样,常常遇到一些执行效率低下的SQL语句,而这些执行效率低下的SQL,有的是业务系统刚刚上线的,有的是已经执行很久但因为执行环境变化而导致出现的。这里给大家分享一个SQL的优化案例分析。

根据我们监控系统,发现线上OLTP的一个核心业务数据库中有一条SQL执行效率较慢。慢到什么程度?半小时执行278次,平均每次28秒,占用整个DB资源的56%。OLTP系统中,实在太慢了。

这里是SQL执行的相关信息。

SQL优化中,有很多人总是第一要看的就是执行计划,那么我们就看看这条SQL的执行计划。下面可以看到单次执行3秒左右,成本为2,consistent gets较高,执行计划中也是走INDEX RANGE SCAN。

其实单看上面的执行计划Cost还是比较低的,SQL优化中,有很多人总是第一要看的就是执行计划,但是看执行计划一定要结合结构信息,这里的结构信息就是表,索引等结构信息及数据分布信息。

我们先看SQL语句吧。以下SQL语句很简单,且在cn字段,c_date字段上都建有索引。

表数据量约有3.6亿数据。

在以上执行计划的基础上,根据对业务的理解,我的疑问是为什么不走cn索引?

这里其实可以根据谓词条件,各自查询 一下就能看到结果,根据cn查询到3条,而c_date条件查询出76w。走cn索引才对。

这里也可以使用HINT强制走cn索引看一下效果,使用HINT强制走cn索引后执行时间变为毫秒级。

SQL优化除了了解结构信息(表,索引),统计信息的准确性也很关键。

这里发现最后统计信息分析时间是5月份,相差了3个多月,所以统计信息是不正确的。

统计信息不准确的原因?

最终发现Oracle在10g版本中默认的GATHER_STATS_JOB没有启动,这里启动默认的GATHER_STATS_JOB,并单独收集一下表的统计信息。

收集完统计信息,这条SQL的执行时间下降到毫秒级别,执行计划已经变为IDX_REC_LOG_CN索引的RANGE SACN,consistent gets从原来的19409  降低到了7。效果还是很明显。

同样的SQL又慢了,现在的执行计划, 又开始走IDX_C_LOG_DATE索引了,而且执行时间又回到了2秒, consistent gets变为10404。以下为执行计划:

同样我们还是先检查统计信息是否正确,这里可以看到了统计信息又不正确了,但是我们发现GATHER_STATS_JOB每天都能执行成功。这是为什么?

解决方法就是定义一个单表收集的JOB。

这也是为什么大表都单独定义收集统计信息的原因,面试过很多的同学,基本上说出直接原因的没有多少,都说是照着网上这么做的。

这里也可以看到相关的10053事件中的成本信息,具体可以参考以下的地址了解每个类型的含义。


最终我们在业务维护时间创建了cn+c_date联合索引后的执行计划,至今再无类似的SQL性能问题。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2015-11-27

管好统计信息,开启SQL优化之门相关推荐

  1. 统计信息:SQL执行优化之密钥

    SQL 执行的指导思想是什么? SQL 执行计划的正确依赖选择依赖于什么?统计信息为什么在 SQL 执行中起到关键性的作用?如何才能自动化收集统计信息?让 一起了解 SQL 执行优化的核心底座. 统计 ...

  2. mysql 非自然月统计_技本功|统计信息对SQL执行效率的影响

    点击蓝字 关注我们 在正文开始前,我们先补充一轮知识点. DING! 什么叫统计信息? 统计信息是数据库对所有表信息进行数据抽样后得出的数据统计,它是一个数据库优化器选择最佳执行计划的核心依据. 什么 ...

  3. DBLINK 无统计信息导致SQL变慢

    今天重庆ORACLE社区有位哥们提问,为啥索引重建(alter index rebuil)之后,SQL变慢了,以前15秒就可以完成,现在要2分多种,于是问他要了执行计划 SQL> set aut ...

  4. execution 排除_使用SQL Server 2016 Live Execution统计信息对SQL查询性能进行故障排除

    execution 排除 SQL Server Management Studio a graphical interactive that allows you to interact with t ...

  5. MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取

    阿里云CloudDBA具有SQL优化建议功能,包括SQL重写建议和索引建议.SQL索引建议是帮助数据库优化器创造最佳执行路径,需要遵循数据库优化器的一系列规则来实现.CloudDBA需要首先计算表统计 ...

  6. 通过手动创建统计信息优化sql查询性能案例

    本质原因在于:SQL Server 统计信息只包含复合索引的第一个列的信息,而不包含复合索引数据组合的信息 来源于工作中的一个实际问题, 这里是组合列数据不均匀导致查询无法预估数据行数,从而导致无法选 ...

  7. 全废话SQL Server统计信息(2)——统计信息基础

    接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...

  8. oracle并行收集统计信息慢,Oracle 学习之性能优化(四)收集统计信息

    emp表有如下数据.SQL> select ename,deptno from emp; ENAME   DEPTNO ------------------------------ ------ ...

  9. Always On可用性组中SQL Server统计信息

    SQL Server统计信息简介 (Introduction to SQL Server Statistics) SQL Server Statistics are an essential part ...

最新文章

  1. 牛顿的另一面:夺权、严惩罪犯,以一己之力挽救英国危机
  2. windows server 2008 让domain user有本地administrator权限
  3. flash mini播放器
  4. 读书笔记《单核工作法》_3原理2,3
  5. 头条的_signature这个如何_今日头条详细页面的cookie加密
  6. python 矩阵元素赋值_对numpy中数组元素的统一赋值实例
  7. 【NOI2015】【codevs4600】【BZOJ4195】自动程序分析,我太弱了
  8. 天刀服务器未响应,天涯明月刀卡顿怎么办 教你如何优化游戏不在卡顿
  9. SonarQube 持续集成代码质量管理
  10. 2021年茶艺师(初级)考试及茶艺师(初级)新版试题
  11. 一种实用的BOOST电路_UC3842升压设计
  12. python pip安装第三方库出现error: option --single-version-externally-managed not recognized
  13. seo站内优化的10点建议及分析处理方案
  14. ONF发布安全部署SDN控制器指南
  15. sql 数据存在包含关系的查询
  16. 第十六届全国大学生智能汽车比赛—摄像头算法控制总结
  17. 毕业设计-后台管理系统
  18. oracle中的列在此处不,为什么列在此处不允许?
  19. HTML5 新标签section使用
  20. C#毕业设计——基于C#+asp.net+sqlserver的客户关系管理系统设计与实现(毕业论文+程序源码)——客户关系管理系统

热门文章

  1. C 回顾 volatile 和 register 修饰符
  2. 动态主机配置协议服务器不能提供,计算机网络基础课程—动态主机配置协议(Dhcp)...
  3. 初始化触发点击事件_【Vue原理】Event - 源码版 之 自定义事件
  4. mysql中增加45天三小时_MySQL查询以45天为间隔添加天数并在新列中显示输出
  5. 【FPGA】单端口RAM的设计(异步读、同步写)
  6. 【 FPGA 】抢占式优先级译码器电路
  7. PDD 笔试反思记录
  8. java zip打包与乱码的解决
  9. 【资料】wpcap.dll/Packet.dll库中相应函数
  10. 如何使用阿里云主机搭建lordofpomelo