恒生技术之眼 作者 林景忠

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

今天从数据库性能的角度,浅谈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 性能优化的更多相关文章

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

    我眼中的Oracle性能优化 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角 ...

  2. 降低磁盘IO使Oracle性能优化(转)

    文章转自:http://blog.chinaunix.net/uid-26813519-id-3207996.html 硬件方面虽然只占Oracle性能优化的一个方面(另一方面是软件),但是仍不可忽视 ...

  3. oracle性能优化之awr分析

    oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录. 导致系 ...

  4. Oracle性能优化1-总体思路和误区

    最近在看梁敬彬老师关于Oracle性能优化的一些案例,在这里做一些简单的总结 1.COUNT(*)与COUNT(列)哪个更快 drop table t purge; create table t as ...

  5. Oracle 性能优化的基本方法

    Oracle 性能优化的基本方法概述 1)设立合理的性能优化目标. 2)测量并记录当前性能. 3)确定当前Oracle性能瓶颈(Oracle等待什么.哪些SQL语句是该等待事件的成分). 4)把等待事 ...

  6. Oracle性能优化小结

    Oracle性能优化小结 原则一.注意where子句中的连接顺序 Oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须卸载其他where条件之前,哪些可以滤掉最大数量记录的 ...

  7. oracle 性能优化建议小结

    原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHER ...

  8. 浅谈Oracle 性能优化

    基于大型Oracle数据库应用开发已有6个年头了,经历了从最初零数据演变到目前上亿级的数据存储.在这个经历中,遇到各种各样的性能问题及各种性能优化. 在这里主要给大家分享一下数据库性能优化的一些方法和 ...

  9. Oracle性能优化之查询语句通用原则

    作者早期文章 Oracle优化 索引是表的一个概念部分 , 用来提高检索数据的效率, ORACLE 使用了一个复杂的自平衡 B-tree 结构 . 通常 , 通过索引查询数据比全表扫描要快 . 当 O ...

随机推荐

  1. ubuntu14.04.1 LTS 64bits较快的更新源

    网上关于ubuntu更新源的帖子一大堆,但是我使用网易源的时候,执行sudo apt-get update命令的时候,总是在最后几步出现hash校验的问题,虽然没什么大的影响,但是对于患有强迫症晚期综 ...

  2. excel 无法打开文件,提示:向程序发送命令时出现问题

    以下的方法以Excel为例,请一个一个的使用,总会有一个适合你的. 1 .兼容性 鼠标右击桌面Excel(或其他)的快捷方式,选“兼容性”,把以管理员身份运行此程序前的勾去掉,就一切ok 了. 如果桌 ...

  3. Node.js(window)基础(2)——node环境下的模块,模块间调用

    参考:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450241959 ...

  4. python【第十三篇】可以写一个堡垒机了

    前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中 ...

  5. about oracle

    Oracle  劳伦斯.埃里森 Larry Ellison history: 人工管理阶段 文件管理阶段 数据库系统阶段 model:[模型是所研究的系统.过程.事物或概念的一种表达形式] 层次结构m ...

  6. ubuntu14.04安装wine以及国际版QQ

    公社(http://www.linuxidc.com/linux/2014-06/103768.htm)说: Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在 ...

  7. 基于page的简单页面推送技术

    我们可以先看下简单效果,打开2个页面可以看到推送效果 服务端我们只需要下面一个方法 using System; using System.Collections.Generic; using Syst ...

  8. 从文章"避免复制与粘贴"到文章"Extract Method"的反思(3)

    在牛人的博客中提到了..如果你的代码可以copy-past的时候,那么久证明你的代码出现了重复.而这种重复仅仅是虚假的代码行的增加而不是像其他的代码复用那样降级成本. copy-pase代码意味着你违 ...

  9. 苹果搜索广告后台大揭秘,最全最细致详解,手把手设置教程「后附官方视频」-b

    WWDC2016 搜索广告分会视频和 PPT 发布了,ASO100 带开发者第一时间了解 Search Ads 后台设置(文末有原声视频). 首先介绍一下搜索广告的模式和竞价规则 广告模式为 CPT( ...

  10. MySQL在创建存储过程的时候,语法正确却提示You have an error in your SQL syntax

    我在使用MySQL工具编写MySQL存储过程的时候,明明语法正确,但是却一直提示You have an error in your SQL syntax. 比如下面一段代码 CREATE PROCED ...