我眼中的 Oracle 性能优化

恒生技术之眼 作者 林景忠

大家对于一个业务系统的运行关心有如下几个方面:功能性、稳定性、效率、安全性。而一个系统的性能有包含了网络性能、应用性能、中间件性能、数据库性能等等。

今天从数据库性能的角度,浅谈Oracle性能优化的一些看法。

首先对于性能问题,大家先接触的一般都是某个业务功能慢,速度客户无法接受。那对于系统的性能无非如下图所示:

当一个性能问题出现时,很多人都会猜测问题各个方面的原因。
今天主要谈数据库的性能问题,就问题而言,我们针对问题经过数据库性能分析,发现数据库性能存在问题,那么就需要对数据库性能问题进行优化解决。

从性能优化角度看,每个人都希望经过优化数据库系统运行的速度越快越好。但是希望终归是希望,系统优化最终能到达什么程度和数据库系统的很多方面有关系。

从优化的角度看,数据库的性能问题基本可以分为几类问题:操作系统性能问题、IO性能问题、数据库系统性能问题、SQL性能问题、网络性能问题等等。

而根据实际结果统计,数据库性能问题80%以上都是SQL性能问题引起。下面谈SQL性能问题之前,介绍一个经常遇见的一个系统配置问题:接到客户电话说“今天做交易系统的历史数据归档,做完历史数据归档后,原来历史放了3年的历史数据,现在历史表只有1年不到的数据,但是查历史的菜单比原来慢了很多,看了SQL执行计划比较,原来是走索引的,现在走的是全表扫描,该怎么处理?”

针对该问题,根据经验:
? 首先确认历史表是分区表
? 然后让客户检查数据库参数optimizer_index_cost_adj,根据标准参数配置optimizer_index_cost_adj=10,建议客户把这个参数设置成5试一下,客户根据建议改了之后,这个问题解决了。

这个问题看似SQL问题,但是通过数据库参数得到解决,说明数据库的很多问题都是互相关联和影响的。

既然数据库性能问题80%以上都是SQL性能问题引起,接下来聊聊对SQL优化的个人一些看法。

说个人看法之前,网上或者面试的时候,大部分人对SQL优化的一致解决方法都是“先从awr报告找出有性能问题的SQL(awr中top sql中耗时长的、消耗逻辑读、物理读的sql)、看sql的执行计划,看sql的执行计划的时候,关注有没有全表扫描、有没有cost很大的操作,然后尝试新建索引、调整索引、调整表的访问顺序、再执行SQL试试看。”

这个步骤其实也没有太大的问题,80%到90%的SQL问题也基本能解决,个人存在的问题是优化的效果具有不确定性。

我的看法是对于SQL优化应该可以通过优化方法,让SQL优化的效果有比较好的确定性,因为有很多的环境是不能让我们这样调整下试试看的。

我的看法是这样的,在SQL优化的时候,首先我们要像解读程序一样先解读SQL,如这个SQL的主要作用是什么,有没有特殊的操作如group by、order by、sum、分页查询等,涉及了几张表、表的数据规模怎么样,表的条件有哪些,这些条件对于表的数据的选择性怎么样。了解这些信息之后,基本也可以确定这个SQL最优的执行计划该是什么样的,再查看执行计划的时候就很容易发现执行计划的问题并知道该如何修正。如果没有了解以上信息,查看执行计划的时候会相对比较盲目。

查看执行计划的时候关注那些方面,主要有如下几点:
? 访问了哪些表
? 表的访问方式(表的访问顺序、表是索引扫描还是全表扫描、)
? 表的连接方式 (nest loop join、hash join、sort merge join、连接是否存在笛卡尔积)
? 字段条件的选择性是否合理(相关字段索引情况、索引的选择性是否合理)
? 排序方法(根据什么样的字段排序)
? 数据获取方式(返回一个结果集的大小)

确认了以上几个方面之后,经过优化之后再确认上面的执行计划信息就基本可以确认优化的效果是怎么样的。SQL优化的目的是减少SQL的系统资源的消耗,在SQL执行计划中也要关注减少表的访问次数,如A表如果在SQL中访问一次即可,不要多次访问。

有人会说,有些SQL很长,可能一个SQL里面就有20张表的访问,如果遇到这样的SQL,就需要根据SQL的结构对SQL进行拆解,然后再逐步优化,就能比较准确地进行SQL优化。
对于SQL优化,希望大家要像看算法一样去解读SQL,总结出属于自己的SQL优化方法!

时间: 2024-10-25 17:29:48

我眼中的 Oracle 性能优化的相关文章

【转载】我眼中的Oracle性能优化

我眼中的Oracle性能优化 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角度,浅谈Oracle性能优化的一些看法. 首先对于性能问题,大家先接触的一般都是某个业务功能慢,速度客户无法接受.那对于系统的性能无非如下图所示: 当一个性能问题出现时,很多人都会猜测问题各个方面的原因. 今天主要谈数据库的性能问题,就问题而言,我们针对问题经过数据库性能分析,发现数据库性能存在问题

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31 本课程介绍: Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第1/10套:Oracle性能优化之执行计划管理.主要学习Oracle性能优化简介,SQL 语句处理流程,软解析和硬解析,绑定变量及案例,游标的介绍,Oracle的优化器,执行计划的查看,SQL语句访问路径,SQL语句的连接方式,Oracle驱动表,执行计划的干预,常用hint提示的使用. 视频教

Oracle性能优化之统计信息管理_超越OCP精通Oracle视频教程培训32

Oracle性能优化之统计信息管理_超越OCP精通Oracle视频教程培训32 本课程介绍: Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第2/10套:Oracle性能优化之执行计划管理.主要学习Oracle性能优化,统计信息的作用与查看,收集统计信息的方法之analyze,收集统计信息的方法之DBMS_STATS,收集统计信息的方法之数据库,收集统计信息的方法之用户,收集统计信息的方法之表,收集统计信息的方法之索引,收集统计信息的

Oracle性能优化之性能诊断工具_超越OCP精通Oracle视频教程培训33

Oracle性能优化之性能诊断工具_超越OCP精通Oracle视频教程培训33 课程介绍 Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第3/10套:Oracle性能优化之性能诊断工具.主要学习Oracle性能优化,Oracle自带性能诊断工具介绍,日常维护中的性能工具操作过程,awr性能数据的收集时间,awr自动收集性能报告如何实现,awr手工快照如何实现,awr baseline的手工调整与管理,awr性能相关的视图介绍,awr性

Oracle性能优化之性能跟踪工具_超越OCP精通Oracle视频教程培训34

Oracle性能优化之性能跟踪工具_超越OCP精通Oracle视频教程培训34 课程介绍 Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第4/10套:Oracle性能优化之性能跟踪工具.主要学习Oracle性能优化,如何获取跟踪文件,sql_trace及案例,10046事件及案例,trace内容分析,oradebug及案例,dbms_system,dbms_monitor及案例,dbms_support,10053事件及案例,综合案例

Oracle性能优化之资源管理_超越OCP精通Oracle视频教程培训36

Oracle性能优化之资源管理_超越OCP精通Oracle视频教程培训36 课程介绍 风哥Oracle视频教程<<Oracle数据库性能优化培训教程>>的第6/10套:Oracle性能优化之资源管理.学习Oracle性能优化,为什么进行Oracle资源管理,如何对Oracle进行资源管理,Oracle资源管理技术如何使用,生产案例-限制数据库的CPU使用率,生产案例-限制服务器的CPU使用率. 视频教程学习地址: http://edu.51cto.com/course/course

Oracle性能优化之操作系统工具_超越OCP精通Oracle视频教程培训37

Oracle性能优化之操作系统工具_超越OCP精通Oracle视频教程培训37 课程介绍 风哥Oracle视频教程<<Oracle数据库性能优化培训教程>>的第7/10套:Oracle性能优化之操作系统性能工具.学习Oracle性能优化,1.操作系统性能优化分析及工具说明,操作系统性能工具之top/topas,vmstat,iostat,free/lsps/swapinfo,mpstat/sar,网络分析,基本信息查看,操作系统性能收集与分析之nmon,oswatcher. 视频教

oracle 性能优化方向

1调优设计 架构设计(RAC/单机).应用设计(模块设计.E-R模型设计) 2调优应用 代码调优.应用存储对象调优 3条用内存 数据高速缓存区.共享池.重做日志缓存区.大池 4.调优I/O RAID模式.文件系统与裸设备.存储缓存.表空间数据文件划分. 存储对象分布等 5.调优竞争 回滚段.Lock \Latch oracle 性能优化方向,布布扣,bubuko.com

Oracle 性能优化的基本方法

Oracle 性能优化的基本方法概述 1)设立合理的性能优化目标. 2)测量并记录当前性能. 3)确定当前Oracle性能瓶颈(Oracle等待什么.哪些SQL语句是该等待事件的成分). 4)把等待事件记入跟踪文件. 5)确定当前的OS瓶颈. 6)优化所需的成分(应用程序.数据库.I/O.争用.OS等). 7)跟踪并实施更改控制过程. 8)测量并记录当前性能 9)重复步骤3到7,直到满足优化目标 1.设立合理的性能优化目标 重点:关于设立目标的最重要的一点是它们必须是可量化和可达到的. 方法:目