概述

当生产环境发生故障或者系统特别慢的时候,这时候你从awr报告拿到有问题的sql,但是优化的时候却优化了很久还没解决,这时候在领导或者客户面前就不太好了。。。那么我们怎么去缩短sql调优的时间,一般优化的思路是怎样呢?


1、先获取有助调优的数据库整体信息

如何缩短 SOL 调优时间,你的思路是什么呢?下面是当我要优化 SOL 时的一般流程:

首先要知道整个数据库的运行情况,前面我已经介绍过数据库 AWR 报告等调优工具,所以这里就不重复说明了,因为 AWR 报告等是在数据库出问题时的利器。可是如果数据库当前没有 出问题呢?其实这个也不一定,很多时候系统没问题是因为你没触发这个问题,其实是有问题的。

比 如某表的索引失效了,某 SOL 访问该列时一定只能走全表扫描;比如某表的属性被设置了并行度,这意昧着所有扫描该表的 SOL 都会并行执行,这;可能会产生严重的资源争用从而让系统瘫痪,比如你的全局临时表被收集了统计信息,访问该表的 SOL 就可能会出现错误的执行计划等等。不过你的 AWR 报告却可能发现不了这些问题,比如该时段和这些对象相关联的 SOL 根本 就没有执行。没发现问题并不代表没有问题,因此我们需要获取所有可能有问题的对象,同时也需要获取所有的相关时段的 AWR 等数据库整体性能报告,获取数据库的整体信息。这里可以考虑用脚本去一键获取,这样就可以提高效率了。


2、快速获取 SQL 运行信息

接下来,在获取到数据库整体信息后,调优的方向就非常明确了,对具体的 SOL 进行调优。执行计划是 SOL 调优的重要武器,通过分析 SOL 计划,我们可以判断 SOL 的访问路径是否 高效,从而进行调整优化。关于执行计划的获取手段有 6 种之多,这是为啥呢?各有啥区别 呢?这部分内容也是在前两天都做了介绍的,大家可以自己再看看。

还需要将执行计划和运行时的统计信息结合在一起分析,这样才会更准确。比如 SOL 产生 了多少逻辑读,多少物理读,是否有排序,是否有递归调用 , 等等。


3、快速拿到 SQL 关联的信息

当获取到 SOL 的执行计划l后,很多都和该 SOL 对应的表和索引有关。比如当我们怀疑驱动表的顺序有错时,我们就会去看看这些表的实际大小和对应的统计信息是否准确;我们也关心表的类型是什么,比如是否是分区表,在哪个列有分区,分区的类型是什么,等等。

除了关注表的信息,我们也很关心索引的信息。比如看到执行计划中非常适合走索引的查询走了全表扫描,我们就会去看看是否该列无索引,如果发现有,就看看此列索引是否失效 了。一般我们也会关心索引的类型是什么,是 Btree 索引还是位图索引还是函数索引;是单列索引还是组合索引,如果是组合索引,哪列在前,如果索引建在分区表上,我们还关心是全局索引还是局部索引,等等。

这里也可以用脚本将该 SOL 涉及的所有表和列的相关信息直接展现在我们面前,这样,解决问题就非常高效了。


篇幅有限,今天主要分享下sql优化的整体思路,相关脚本抽空再单独介绍下~

后面会分享更多关于DBA方面内容,感兴趣的朋友可以关注下!

sql优化的方法及思路_合理的sql优化思路--如何缩短SQL调优时间?相关推荐

  1. sql 排除 sum为0的_一文为你详解Unique SQL原理和应用

    ​​​​​​​​​​​​​​​​​​​摘要:以一定的算法结合解析树中的各结点,计算出来一个整数值,用来唯一标识这一类SQL,这个整数值被称为Unique SQL ID,Unique SQL ID相同的 ...

  2. python 性能优化监控工具_推荐一款非常实用的JVM性能调优监控工具(亲测好用)...

    前言 现实企业级Java开发中,有时候我们会碰到下面这些问题: 1.OutOfMemoryError,内存不足 2.内存泄露 3.线程死锁 4.锁争用(Lock Contention) 5.Java进 ...

  3. tcp压测工具_【解决方案】性能压测及分析调优实践

    [关键导读]结合一次重保活动的性能压测需求,详解了整体的性能测试策略及性能分析思路,并在实施过程中有效利用了网易易测的NPT性能测试平台一站式完成了压测场景设计.执行.业务指标监控.性能指标分析等活动 ...

  4. aix系统java堆_浅谈AIX环境下的Java性能调优

    1.什么是Java Java 是一种面向对象的编程语言.它以 C++ 为模型,被设计成小的.简单的.在源和二进制级别跨平台的可移植的语言,Java 程序(applets 和应用程序)可以运行于任何已经 ...

  5. 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...

    JVM系列 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势.及使用场景 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:深入详解JVM内存模型与JVM ...

  6. python 调用不存在的方法 统一处理_提取不重复数据在Excel、SQL与Python中的处理方法...

    村长今天跟大家简单分享一下如何在Excel.SQL和Python中用不同的方法提取不重复值(数据去重). 一.Excel 1.1.函数法(数组公式) 函数公式:=IFERROR(INDEX(A:A,S ...

  7. mysql排行榜制作思路_排行榜的简单设计思路

    TOC 前言 排行榜几乎已经成为互联网应用中的必备模块,特别是游戏领域,它是对某一相关同类事物的客观实力的反映,带有相互之间的比较性质,带有竞争意义. 对于平台来说,可以带来一定的权威性,提高平台影响 ...

  8. sql事务提交回滚命令_提交,回滚和保存点SQL命令

    sql事务提交回滚命令 Transaction Control Language(TCL) commands are used to manage transactions in the databa ...

  9. 数据权限设计思路_后台权限管理设计思路:三种模型分析

    编辑导语:任何系统/产品搭建时,最先考虑的都应该是权限管理模块,而且权限管理模块的清晰.稳定是平台产品健康发展的基石,权限管理核心考虑的问题是用户与权限的关系.本文作者对三种不同权限管理的版本展开了梳 ...

最新文章

  1. spacy如何安装最匹配的版本正规文档en_core_web
  2. c语言将数组中奇数放在另一个数组,把数组中所有的奇数放在另一个数组中返回...
  3. mysql中表名为关键字的处理方法
  4. java substr函数_oracle 中的substr()函数的用法,以及与java中String.substring()方法的区别...
  5. hdu 4223 排序
  6. Excel模板导出之动态导出
  7. SOA和微服务之间的区别
  8. 明显调用的表达式前的括号必须具有指针函数类型_每天三分钟带你搞懂C++基础Day5 处理类型 typedef、auto、decltype...
  9. 面试被问进线程的区别
  10. 3d打印 开源_Hovalin:开源3D打印小提琴
  11. ustc FreeBSD / rust 镜像源
  12. jQuery基础 - 选择器
  13. 饿了么商品排序怎么实现PHP,PHP实现桶排序算法
  14. php运行日志在哪里看,thinkphp错误日志在哪
  15. STM32电机测速(正交或者霍尔编码器)
  16. 多渠道归因分析(Attribution):python实现Shapley Value(四)
  17. ipad2利用crappstore安装破解软件成功-还是写一下我安装的过程吧,大家可以参考一下...
  18. 在OpenStack私有云上安装配置虚拟机
  19. 快递鸟代收货款接口demo-order
  20. C语言实现wav文件的读写

热门文章

  1. SDK,JDK,API的区别
  2. 我花了 8 小时,掌握了一下 Flutter | Flutter 中文站上线
  3. 【POI】对于POI无法处理超大xls等文件,官方解决方法【已解决】【多线程提升速率待定】...
  4. springmvc国际化
  5. Android布局中涉及的一些属性
  6. JSP基础(4)-JavaBean
  7. 反置页表(1__操作系统)
  8. gradle配置及使用教程、groovy入门示例
  9. k8s master节点参与调度(去除NoSchedule污点)
  10. 【网址收藏】华为荣耀V9(DUK-AL20)刷机包下载