【转载】我眼中的Oracle性能优化
我眼中的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优化方法!
【转载】我眼中的Oracle性能优化的更多相关文章
- 我眼中的 Oracle 性能优化
恒生技术之眼 作者 林景忠 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角度 ...
- oracle性能优化之awr分析
oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录. 导致系 ...
- Oracle性能优化1-总体思路和误区
最近在看梁敬彬老师关于Oracle性能优化的一些案例,在这里做一些简单的总结 1.COUNT(*)与COUNT(列)哪个更快 drop table t purge; create table t as ...
- 降低磁盘IO使Oracle性能优化(转)
文章转自:http://blog.chinaunix.net/uid-26813519-id-3207996.html 硬件方面虽然只占Oracle性能优化的一个方面(另一方面是软件),但是仍不可忽视 ...
- Oracle 性能优化的基本方法
Oracle 性能优化的基本方法概述 1)设立合理的性能优化目标. 2)测量并记录当前性能. 3)确定当前Oracle性能瓶颈(Oracle等待什么.哪些SQL语句是该等待事件的成分). 4)把等待事 ...
- Oracle性能优化小结
Oracle性能优化小结 原则一.注意where子句中的连接顺序 Oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须卸载其他where条件之前,哪些可以滤掉最大数量记录的 ...
- oracle 性能优化建议小结
原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHER ...
- 浅谈Oracle 性能优化
基于大型Oracle数据库应用开发已有6个年头了,经历了从最初零数据演变到目前上亿级的数据存储.在这个经历中,遇到各种各样的性能问题及各种性能优化. 在这里主要给大家分享一下数据库性能优化的一些方法和 ...
- Oracle性能优化之查询语句通用原则
作者早期文章 Oracle优化 索引是表的一个概念部分 , 用来提高检索数据的效率, ORACLE 使用了一个复杂的自平衡 B-tree 结构 . 通常 , 通过索引查询数据比全表扫描要快 . 当 O ...
随机推荐
- 【转载】Mysql 查看连接数,状态
转载地址:http://blog.csdn.net/starnight_cbj/article/details/4492555 命令: show processlist; 如果是root帐号,你能看到 ...
- python正则
1.. 匹配任意除换行符"\n"外的字符:2.*表示匹配前一个字符0次或无限次:3.+或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复:4. .*? 表 ...
- Java不同编码方式,中英文字符所占字节数
测试代码 public class Test { public static void main(String[] args){ String[] charsetNames={ "UTF-8 ...
- iOS,几种设计模式
1.单例模式 2.观察者模式 3.委托代理 4.block回调 5.反射机制 单例模式 iOS单例模式的2种方式.根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的 ...
- JavaMail发送邮件的小程序
首先加入jar包javax.mail.jar package com.tideway.javamail; import java.util.ArrayList; import java.util.Da ...
- JAVA静态代码审查之checkstyle
技术总监来巡查,刚巧前段时间遇到了一个问题还没解决,就拉着大牛开问.结果,问题是解决了,还附带了另一个问题,或是要求出来,没啥技术含量,但是很麻烦的一个东西:代码格式. 之前我写代码,因为屏幕比较小, ...
- JavaSE基础第一篇
1.JDK的安装: 包括JRE 和JVM 下载地址: www.oracle.com/www.sun.com 2.环境变量 set path = "bin所在路径" 设置pa ...
- Java找不到或无法加载主类
今天用cmd运行一下java出现了找不到或无法加载主类 的问题 javac编译可以通过 java运行不了 原因: 看一下java版本 看一下javac版本: 编译和运行环境的版本不一样报错原来是用 ...
- C语言三维数组分解
很多人在学习C的时候,感觉三维数组很难想象,而且不理解深度是什么?做了一个图,帮大家分解一下 ...
- C#面向编程的三大特征
在面向对象的编程中,首先要清楚地理解面向对象编程的三个基本特征: 封装, 继承, 多态! 1.封装 更确切地说,是对象封装.就是每个对象都包含自己进行某种操作时所需要的所有信息,而不依赖于其他对象来完 ...