2.2 基于OWI的优化方法论
2.2.1 OWI优化方法论简述
OWI,是Oracle Wait Interface的简称。最开始OWI并不是为了性能优化而出现的,而是出于调试的目的,用来明确当前正在发生什么事情,在Oracle 7中它就已经以初级的方式存在了。当Oracle 8i极其明确地把OWI引入性能优化时,数据库性能优化方法论就出现了划时代的飞跃。OWI方法论让Oracle第一次跳出部件构成性能的视野,从一个旁观者的角度或者业务流程的角度来考虑问题,使其与现实世界的基于流程协调的流程优化相符合。
排队和冲突是现实世界中时时刻刻普遍发生的事件,我们吃饭要排队、购物要排队、上车要排队、看病要排队,甚至走路都要排队。如果不想被前面的人或者物堵住,需要不断地变换通道或者将障碍进行拆除,我们的观点和行为会不断地发生冲突。Oracle OWI方法论充分地认识到了排队和冲突是生活的主题,是数据库流程的主题。例如,特别典型的是看医生,每个人都有切身体会。排队挂号,排队看医生,排队检查,排队拿药,各种排队合计3个小时,医生看病处理不超过5分钟。只要可以降低排队时间,就可以提高效率,降低时间成本。OWI就是基于这个朴素的理念的,只要使各种等待所消耗的时间尽可能低,就可以提高业务系统的性能。对于Oracle来说,OWI的发展就是尽可能精细地衡量等待事件;对于性能优化者而言,就是发现等待事件的原因并且尽可能降低或者消除它。
OWI方法是快速优化Oracle性能的最有效方式,OWI的精准定位使性能优化不再需要到处进行衡量。某种程度上,OWI方法论类似于故障处理的思路,处理焦点在局部,使优化者无需了解业务流程,无需进行全局流程的协调,降低了对性能优化者的能力要求。
至今为止,OWI方法依然是最为快速有效的性能优化方法。虽然如此,由于OWI关注的局限性,有一些缺陷,使其解决复杂的性能问题时有些力不从心,更多只作用在突然变化的性能异变上。
OWI方法事实上并不是从业务(流程)的角度看问题,而是从CPU的角度看问题,只要CPU一直处于忙碌之中,就假设性能是优异的。这就忽略了在很多场合下CPU的处理效率才是性能问题的本源所在。OWI方法从本质上与基于局部命中率分析方法类似,都是眼睛向内看。一个是只要我忙,系统就好;一个是只要我好,系统就好,总体来说都缺乏流程的概念。OWI的使用如此简单,效果是如此出色,使绝大部分性能优化者不再去关心流程,而仅关心发生性能问题的某一点。OWI方法在快速优化性能的同时,事实上割裂了业务流程之间的关系,往往使复杂的性能优化工作顾此失彼。
OWI优化工作者总是精心研究常见的Oracle等待事件,研究其等待事件可能发生的原因以及对应的解决方案。OWI优化方法获得各个级别DBA的厚爱,除了其简单有效之外,最为重要的原因在于其可以不用过多考虑业务相关问题,只用采用故障解决的思维逻辑来解决性能优化问题。