SQL优化实例-思路分析

简介: 一SQL优化思路 一个真实具体的SQL优化思路 一般都看预估的执行计划,比如遇到一个sql执行计划很长,很复杂,从计划中没有看到返回行数多,cost高或连接方式错误的地方,没有明显瓶颈,但整体逻辑读很高,运行很慢。


一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 我和数据中心的故事-分享批量时快时慢的场景

目录
相关文章
|
2月前
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
137 2
|
16天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
25天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
82 10
|
24天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
2月前
|
SQL 资源调度 分布式计算
如何让SQL跑快一点?(优化指南)
这篇文章主要探讨了如何在阿里云MaxCompute(原ODPS)平台上对SQL任务进行优化,特别是针对大数据处理和分析场景下的性能优化。
|
2月前
|
SQL 数据管理 数据库
SQL语句实例教程:掌握数据查询、更新与管理的关键技巧
SQL(Structured Query Language,结构化查询语言)是数据库管理和操作的核心工具
|
2月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
2月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
98 2
|
2月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响