SQL优化实例-思路分析

一SQL优化思路
一个真实具体的SQL优化思路
一般都看预估的执行计划,比如遇到一个sql执行计划很长,很复杂,从计划中没有看到返回行数多,cost高或连接方式错误的地方,没有明显瓶颈,但整体逻辑读很高,运行很慢。这时就可以去看真实的执行计划,并查看真实计划里逻辑读cr最多的步骤。可以做个10046。根据逻辑读最多的步骤判断对应连接方式,比如这里nest loop 的cr最大,且对应俩大结果集。显然有问题。于是再根据预估的执行计划判断俩表的连接方式。预估计划是164 :1结果集,那根据对应查询条件,发现查询条件上使用了trunc函数,导致优化器用默认选择度估计返回行数较少就用全表扫描做驱动表了。

二 AWR分析思路
 根据awr分析
1 数据库IO 大 概要指标,物理读
负载很高,概要中发现物理读很高;进一步发现等待事件中跟io等待相关的事件很多;
于是先去wait class小结看到IO等待占比到70%以上,再看 time model中再发现sql执行占db time比例很大,可见总体sql执行时间长,IO等待占用大量消耗,说明是大量IO等待高的sql导致物理读,于是就根据具体哪个维度查看sql性能,综上判断跟sql 的io等待有关所以查看按io wait排序的top sql

2 dbcpu 消耗大 概要指标,dbcpu
dbcpu指标值和逻辑cpu近似 ,判断小号在dbcpu的时间多,进一步根据host指标判断busy cpu比例也很大,判断dbcpu上运行时间很长,
首先根据cpu维度查找top sql, 找出慢sql优化。优化的sql是查询条件里使用了or,这点可根据执行计划里的实际时间判断具体慢的计划步骤,
然后对sql改写成union方式,具体union还是union all 根据select查询出的字段是否有唯一所以判断查询字段中没有重复数据,所以用
union all不会排重,也不会排序,简单合并结果后就返回

3 概要指标 redo size
根据redo size 可以判断是redo日志太小,还是dml操作过多
如果redo size到 2M/s 那一分钟120M 20分钟就是2400M,而现在一个日志文件50M ,50M/2M 半分钟就慢了,所以可以跑个ADDM ,
根据建议把redoSize设置到2G。
参考 性能调优之redo切换频率

4 逻辑读和物理读几乎一致
判读是直接绕过SGA,读数据到PGA了,等待事件发现有direct path read,根据问题现象发现用户用8条sql做并行测试,因此db判断
每个进程各读各的不在共享一个SGA,其他内存里读数据,因此性能变慢
也有类似逻辑读和物理读差不多的时候,但那就是逻辑读慢,执行时间长,且大部分时间在db cpu上,跟HASH 连接算法有关,
使某个桶内的数据太过多,早成每个块上的数据每次都要在桶内比较很长时间,造成逻辑读很低,hash表都缓存在内存,但每次比较
都要从磁盘读数据和桶里数据比较
http://blog.itpub.net/26736162/viewspace-2137141/  Oracle数据库服务器IO高的分析方案和案例探讨
http://www.talkwithtrend.com/Article/177951 我和数据中心的故事-分享批量时快时慢的场景

时间: 2024-09-21 15:42:00

SQL优化实例-思路分析的相关文章

mysql sql优化实例

mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B5 at byte 628331 # This item is included in the report because it matches --limit. # Scores: V/M = 0.19 # Time range: 2016-09-24T15:14:24 to 2016-10-0

阿里云慢SQL优化挑战大赛分析

[背景] 阿里云慢SQL优化挑战赛:https://yq.aliyun.com/articles/136363?spm=5176.100240.searchblog.32.oYlhtr [考点分析] 本次慢SQL优化挑战赛的题目全部来自于生产案例,将众多考察点揉合到一条SQL中,主要考虑了以下方面: 表设计:考察字符和数字字段定义,字符集大小写校验,时间字段存储. 驱动表:考察多表join时候最优的连接顺序. 索引优化:考察索引消除排序以,索引隐式转换,覆盖索引避免回表的问题. 执行计划:使用e

SEO优化之思路分析

摘要: 我一直在学习SEO,不过没有经过专门的培训,都是自己实际操作出来的.有自己成功的操作案例,今天老板又给我下达的新的任务.此篇为一分析思路,也算一记录留待日后对比较正. 我一直在学习SEO,不过没有经过专门的培训,都是自己实际操作出来的.有自己成功的操作案例,今天老板又给我下达的新的任务.此篇为一分析思路,也算一记录留待日后对比较正. 一.在优化之前先给用户一个借口 请你记住,如果你的网站能给用户提供一个有用的功能,然后在配合上技术性的优化技巧.那么你的网站获得排名,那是早晚的事儿.最怕的

SQL优化实例

示例一:hint滥用 select /*+ ordered use_nl(b a c d)*/        *   from b,a,c,d  where b.col1 = a.col1    and a.col2 = c.col2    and a.col3 = d.col3    and a.dt  >= to_date('20010101 00:00:00','YYYYMMDD HH24:MI:SS')    and a.dt <   to_date('20010102 00:00:0

走在专家的路上,每天一条SQL优化(3)

本系列分享的SQL优化实例,并不一定适用于所有相似SQL或所有场景.我们只是介绍一种方法,当你再次遇到类似SQL,可以根据真实场景,选择最适合的方案.另外,有疑问的时候,最好的办法就是测试,动手才能找到最佳答案! SQL文本如下: SELECT NVL(SUM(SRE), 0) HRJE FROM MD3U.CARD_INCOME A WHERE YLGRZHH = '371081110630214389' AND DDQCSRH IS NULL AND ZDLSH IS NOT NULL AN

基于CBO的SQL优化和Oracle实例优化

作者:朱培 ID:sdksdk0 SQL优化是数据优化的重要方面,本文将分析Oracle自身的CBO优化,即基于成本的优化方法.Oracle为了自动的优化sql语句需要各种统计数据作为优化基础.外面会通过sql的追踪来分析sql的执行过程,消耗的资源信息.对于数据库的性能问题往往是在系统部署一段时间之后出现的,即大量用户开始使用该系统,系统的数据处理量和各种计算复杂性增加的时候,这个时候往往会追溯到系统的初始设计阶段,所以我们还是要在编码阶段就编写高效的sql语句.我在网上看到了很多关于sql优

CloudDBA最佳实践-TOP SQL优化分析数据库性能问题

    云数据库CloudDBA诊断报告的TOP SQL优化是非常实用的功能,我们可以通过TOP SQL去诊断数据库中各种问题,比如性能出现下降,数据库压力出现波动,下面介绍两个线上生产案例.     一. 利用CloudDBA TOP SQL找出数据库规格升级而性能下降的元凶     最近在协助用户进行系统重构,RDS测试选型自然成为了本项目的一个重点,但是用户在测试不同规格的时候发现大规格的实例性能居然不如小规格,4C32G规格性能比8C64G规格高出10%,其性能监控也是非常的正常,4C3

Hadoop平台中SQL优化的四个思路

要正确的优化SQL,必须能快速定位性能瓶颈点,或者说快速找到SQL主要的开销所在.最慢的设备通常是瓶颈点的成因,如文件下载时的瓶颈点可能是网络速度,本地文件复制时的瓶颈点可能在于硬盘性能. 为了快速找到SQL的性能瓶颈点,首先需要读者对各种设备的性能数据有一些基本的认识,如千兆网络带宽是1000Mbps,硬盘转速为每分钟7200/10000转等. 下图数据给出了一些当前主流的计算机性能指标. 图1 I/O各层次硬件性能汇总 如上图所示,每种设备基本上都有两个重要指标: 延时(响应时间):反映硬件

网站seo优化实例分享 8个方面具体分析

权重体现:域名由3个英文字母.2个数字组成,普通域名且注册时间不长(08.12.25),域名权重较低. 收录正常:baidu:164;google:163;pr值:1 收录量和PR值很低,加上没有链接建设,需全面改良,做整站优化. 优化的具体分析体现在如下几点: 1. 竞争程度分析:该网站是一个传统的家政服务行业网站,竞争度属于一般激烈,在福州本地类似的相关性网站多达数万,它的主要竞争对手一般都来自大型的家政服务连锁公司,少数为社区性的家政服务中心,且这些网站提供的服务比较成熟,专业性比较高,也