第1章Oracle性能优化漫谈
1.1 从生活场景漫谈性能优化
Oracle数据库性能优化一直是一个让人既胆怯又兴奋的话题,在初级DBA眼里,这是一个神秘的领域,即使是资深的Oracle DBA,也可能无法描述清楚性能优化究竟要做什么,应达成什么目标。那么性能优化究竟是做什么的呢?简而言之,性能优化就是让我们的工作速度变快,快到让我们满意为止。自然,又有读者会问了,我们的工作是什么呢?什么程度才算快,是否可以衡量?看,头疼的问题又来了。
1.1.1 从一个真实病例说起
下面是本人的真实经历,也许很能够说明一些问题:
不知道从什么时候起,我开始头疼,主要是半边头疼,有时候会伴随眼睛疼和牙齿疼,疼痛顺序一般为头疼→眼睛疼→牙齿疼。当持续头疼根本不能够工作的时候,我去看医生了。先到神经内科做了脑部CT检查之后,医生说没有多大问题,估计是压力大、劳累导致供氧不足,属于亚健康状态,要多锻炼。脑部没问题当然很开心,不过疼痛的问题依然没有解决,最终导致无法工作。既然可能是最近太累的缘故,那么选择给自己放假,到三亚去度假。到三亚的第二天,头疼就消失了,我很开心地认为确实是前段时间太累了。在三亚呆的这段时间,一直没有头疼过。
可回来上班后不久,我头疼的毛病又开始发作,只能继续上医院。这次去了脑外科,医生检查之后也没看出什么毛病,开了一些老年人服用的舒缓血管的药,看看是否有效。药吃完了,头疼依旧。老婆给我买了一些虫草,以加强供氧和营养。吃了1个月的虫草后,居然头疼病好多了。我再次到脑外科看医生,医生不认可吃虫草对头疼有好处。我问医生,是否有可能是牙齿疼痛引起的,医生同样不认可。
由于我有鼻窦炎的老毛病,所以就去耳鼻喉科看医生。耳鼻喉科的医生看了之后,初步判断是鼻窦炎引起的头疼,说需要连续吃3个月左右的药。在头疼难当的情况下,我坚持吃了3个月治疗鼻窦炎的药,可惜头疼依旧,而鼻窦炎已经极其轻微了,我再次提出牙齿的问题,医生同样不认可。耳鼻喉科不行,我开始找眼科医生看。经过眼科医生全面的检查之后,认为眼睛有些炎症,但应该不会与头疼产生关联。无论如何,我还是坚持点眼药水,吃药。
后来公司体检,由于牙齿会疼,所以顺便看了牙科医生。我再次提起牙齿庝是否会引起头疼的问题,医生表示应该关系不大,不过表示可以把牙神经腐烂掉以看看是否存在关联。非常神奇的是,医生在把牙神经腐烂之后,我的头疼立即消失了,基本确认了牙齿疼和头疼之间的关系。
毕竟是关系到脑部的大事,还是不放心。我有一个脑外科的同学回国之后,我马上去找他,再次确认了脑部没有问题,也确认了牙齿疼是有可能会引起头疼的,而且同样的神经也会导致眼睛疼。
人体是一个高度协作的有机生命体,任何一个环节出现问题,就可能会导致不舒服。Oracle数据库虽然没有人体复杂,但也是一个高度协作的同步系统,任何一个环节出现问题,都有可能导致最终的业务系统性能变慢。为什么性能的优化就像某些疾病的诊断一样,处理起来如此困难,原因主要有以下两点:
无论是医生还是DBA,都习惯于以部件分解的方式来看待问题。医生把人体分解成为一个个独立的器官;DBA把Oracle数据库分解成了实例、SGA、数据库以及更细的部分。
医生要对人体工作流程机制有全局性的认识,还要了解生命体生存的全局影响要素和依赖性,才能准确判定病源在哪里。而对于DBA来说,同样也要在掌控数据库的全局依赖性、全局同步协作处理及具体业务流程的情况下,才能真正将Oracle的性能优化提高。
正是因为这两个方面的原因,导致专科医生和精通故障处理的DBA很难很好地从表象透析本质,从而找到最恰当的解决办法。
相信大家从上述案例中已经很清晰地看到性能优化和故障解决的区别:性能优化关注全局和流程,以及流程之间的协调性;而故障解决关注局部和局部的有效性。
1.1.2 如何改善宝马汽车的运行速度
想象这样一幅画面:一辆性能优异的宝马汽车,以时速100km轻松地行驶在路上,一路风光无限好。可不知从什么时候起,它的速度渐渐慢了下来,从时速100km减到95km,再减到80km、60km、40km,似乎还有继续减慢的趋势。如果这时请你猜猜是什么原因导致的,你会如何判断?可能很多人的第一想法是车坏了,但如果我告诉你车看起来依然光鲜,自动化检查也提示汽车没有任何问题呢?你又会想到什么?马路变窄?如果我说走的是一条8车道的马路呢?是不是有点傻眼了?
假设就在我们分析问题的这个时段,车速突然又加快了,时速逐渐恢复到100km,而且持续观察一段时间,比如30分钟,发现它已经稳定在了100km,似乎一切都正常了,让人不禁欢喜。但是,如果你是一位DBA,相信在这个时候,不会就此放过前面的问题,职业习惯会让你心存疑虑:为什么宝马汽车会有一段时间速度不正常,到底是什么导致的,下次会不会再次出现?
宝马汽车在马路上的运行状况是最为典型的业务性能优化场景,作为一个性能优化者,必须要明晰是什么原因导致这种情况的,并且应了解该如何进行改善。
每个人都习惯从自己的专业知识角度去分析问题,有句话说得好,我手中只有一个锤子,那我看哪里都是钉子,总要让我的锤子发挥作用吧。事实上,如果我们的视野从宝马汽车上移开,也许问题就会豁然开朗。宝马汽车性能优异,保养良好,可这并不是跑得快的唯一前提,一辆汽车的行驶速度是由很多因素决定的:汽车性能及状况、司机的技能和状态甚至心情、当时的路况、天气等,这些要素共同决定了汽车会以什么样的速度运行。
作为一个性能优化工作者,可能也会面对类似上面的问题:业务系统突然跑得慢了,可是我的系统没有问题啊,数据库也没有任何问题呀,到底是怎么回事呢?数据库就好比是宝马汽车行驶时的马路,不过,这条马路并不是宝马汽车的专用通道,还会有其他车辆(如拖拉机)在行驶。我们不能说马路有8车道宝马汽车就一定跑得快,因为跑在马路上的其他汽车以及天气的变化,甚至行人都有可能左右宝马汽车的速度,比如,汽车变道甚至发生碰撞,天色变暗、打雷下雨以及暴雨或大雾,行人过马路等都会对车速有影响。我们也不能说速度变慢了就增加车道(如从4车道变成8车道),经验告诉我们,再宽的马路也会堵车,再好的汽车也会抛锚。性能优化工作者从某种程度上来说就相当于交警,他要根据马路上的繁忙程度进行调度,该快的快,该慢的慢,该拖车的拖车,该变道的变道,需要从8通道变成12通道的时候也要勇敢提出来。同时,他也要知道不能把台风天的汽车行驶速度和艳阳天进行比较,即使是同一辆汽车或同一个司机或同一条马路或同样的拥塞。