您的位置:首页 > 数据库 > Oracle

由儿童故事引申出的ORACLE优化思路剖析

2012-03-08 11:29 197 查看
近期做了不少相关ORACLE培训,同时也处理了非常多的案例,越来越深刻的发现,其实优化和生活中的道理是一样的。我反复的和学员、同事、朋友说这些,就为了说明这个简单的道理:其实优化和生活是一样一样一样的!

无非就是意识+技能。

我发现我每10个优化案例中,就会有5个左右是不需要ORACLE技能,而仅需要意识的,然后另外5个呢,是需要技能+意识。

比如如下几个工作中的小例子:

1. 某天,有人找我,系统运行很慢,怎么办啊怎么办?

后来发现是一系列后台JOB的SQL在运行,很占资源,仔细看看这些SQL,居然有写时间>2005年 <2006年,有点奇怪,怎么一直是运行历史的记录,后来得知是当时测试阶段的进程,早就该停了,那如何优化,一个字,剁!

2. 再某天,有人找我,说XX过程运行很慢,怎么办?

过程中的某个模块运行很慢,我还没调测的时候就发现,这个模块和顶端的SQL逻辑重复了,如果上面成立,下面就不必再判断了,下面成立,上面也就不必判断了。但是运行也不影响结果,因为重复判断也无妨,所以一直没人发现这个问题。那后来如何优化,很简单,问清楚后,把慢的这个模块的SQL就两个字,剁剁!

3. 再再某天,局方让我优化一个SQL

我看了以后说,某SQL因为该表记录太大而运行缓慢。一直保留到2008年,你真的需要这么多吗?局方说,真的吗?我只需要最近3个月就可以了。 怎么优化,删除所有3个月以前的记录(后续将表分区),就是三个字,剁剁剁!

4. 再再再某天,有人问我某SQL插入很慢,怎么办?

看了以后,我发现几个问题:

1. 一个FOR LOOP循环的INSERT 插入,并带有一定的逻辑,发现 LOOP带ORDER BY 的排序。

我问他,你很想顺序的插入吗,回答YES,那你取数的时候不需要ORDER BY查吗,他回答那也要,因为他后来知道其实要顺序查询一定要ORDER BY的。那你又何必ORDER BY的插入呢?

2. 一堆的索引

问,你这个索引这么多,都有用到吗? 回答是,暂时没用,先建起来,以后看看,说不定要用到。

咋解决,剁剁剁剁!刀都砍缺了。

因此,优化有的时候真的是意识很重要,并不仅仅是技能,生活也是如此。就是少做事,不做事。不过看上去简单的道理,其实不见得在具体工作中能明白, 因此我写了这个小文,让大家加深印象,也输出我的方法论。

5. 再再再再某天,有人说几个晚上了都无法清理某个表成功?

咋清理啊,遇到啥问题啊?哦,是这样的,大表记录8千万,要删除一些没用的记录,但是删除了4个小时还没结束,而且老遇到锁的问题,只好一直放弃。

那你要删除多少啊?---答曰删除大部分。

那保留多少啊?--答曰 保留,没想过,哦,大致只有几万吧。

那你就新建一张表出来吧。还会慢吗,还会锁表吗?答曰:哦,对啊,那原来的表就可以。。。。。

YES ,剁剁剁剁剁。。。。。。。刀完全砍坏了。

不说了,开始讲故事了,这个买鱼系列故事是我某天晚上即兴编了然后说给我宝宝听的,幼儿园中班的小朋友都听的懂的故事来描述ORACLE优化方法论,我觉的没人听不懂。宝宝还回答了我不少问题,基本正确,甚至还会联想!哇塞,感觉很开心,孩子没傻。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: