系统优化工作其实对团队的要求还是比较高的,可能有些读者会不以为然,不就是做个优化吗?谁不能干点,干不了难干的,干点普通的还不容易吗?事实上,系统优化与给病人看病一样,高水平的医生可以准确的给你诊断出病因,经验稍微差点的大夫凭借着一流的诊疗设备也可以达到差不多的效果,但是如果你到了一个二把刀大夫手里,再缺少一些高端仪器,那么一边给你用葡萄糖做基液打点滴,一边再给你打胰岛素救你的糖尿病这种事情,也是很容易发生的。一个系统到底出了什么问题,要解决问题必须抓住哪些关键点,都是十分重要的,如果优化团队不具备专业的系统优化知识,则优化工作可能无法达到组织的工作目标。更有甚者,在一些比较复杂的场景下,如果不具备专业能力的人去做优化工作,甚至可能对你的系统造成不可逆的损害,就像上面所说的水平较低的大夫的做法,可能会毁了你的身体。
因此说,对于一个相对专业的优化团队来说,具备基本的能力是十分重要的。那么一个专业的优化团队需要掌握哪些基本技能呢?
首先,优化团队需要全面掌握你所优化的系统的总体架构情况,包括整个系统的每个IT组件的基本情况。对于传统企业来说,WEB服务器、应用服务器、数据库、数据库服务器、存储及存储网络、网络等关键IT组件的基本使用、优化要点、容易出问题的地方,都需要有所掌握。只有团队具备这样全面的能力,才能在一个优化项目中无论遇到什么情况,都能正确应对。信息系统是一个前后关联十分密切的系统,有时候优化好了WEB服务器,压力就传递到应用服务器上了,应用服务器如果没有做相应的优化,就可能会撑不住甚至出问题,应用服务器优化好了,可能会把数据库服务器压垮了。在后面的9.2.2 《系统优化中的排队效应》中就介绍了一个这样的案例。因此,在优化团队中,至少需要有一位对系统的整体架构以及每个IT组件都比较熟悉的,能够把控全局的专家作为技术负责人。
其次,优化项目是多部门协同的项目,不是技术专家闭门造车的工作,因此,优化团队需要具有良好的沟通能力,能够高效的与业务部门、运维部门、应用开发商做好沟通。
再其次,优化项目是一个组织严密的项目,对整个工程的管理与管控能力也十分重要。工程管理能力可以让整个项目变得有序和高效,达到事半功倍的效果。
最后,优化项目是一个技术性很强的项目,不同技术能力的技术团队面对相同的问题,可能会交出不同质量的答卷。优化人人能做,但是做出来的效果,最终还是要看团队的整体技术能力了。在一个做系统优化的团队中,必须要有对IT系统整体架构都比较了解的架构师、熟悉数据库的DBA、熟悉中间件的开发人员与熟悉网络、主机、存储等IT基础设施的人员。当然不可能在一个优化团队中配备齐所有这些人员,但是必须要在优化团队需要时能找到上述的专家给与协助。这些人员也不一定要同时出现在优化现场,不过在一个高水平的优化团队中,至少在每个领域都能找出一个牛人来。
上面所说的团队技术能力要求,主要还是指大型专业优化项目所需要具备的能力。一些日常的小优化,实际上确实是人人都能做的。十年前我给一家医院做数据库迁移工作,完成后,客户的电脑科长问我有没有什么简单的方法去优化SQL?因为他发现他们系统中的很多SQL的质量都有问题,开发商根本没有优化好SQL就把应用上线了。于是我教他使用Oracle 10g自带的dbconsole去分析SQL语句,先找到开销比较大的SQL,然后点击优化按钮去查找优化方案。很快他就掌握了这个方法,于是在一个月内,在他们的HIS系统上找到了几十条存在问题的SQL语句,大多数都是缺少合理的索引导致的系统性能问题。通过他的优化工作,他们的HIS系统的性能得到了极大的提升,资源开销下降了一半,医生也觉得系统快了不少。
事实上,对于一些简单的日常优化工作,是不需要太高深的技能的,只要自己能很好的掌握的技术或者工具,都可以帮你做一些优化工作。但是这种优化工作只是局部的,日常的工作,千万不要轻易去尝试一些超出你的能力的优化工作,否则其风险是十分高的。
即使你只是做一些简单的日常优化工作,你也需要对你要做的事情十分清楚,否则还是会遇到一些你所不能控制的风险的。还是那位科长,自从他学会了使用SQL TUNING ANALYZE去分析SQL后,就乐此不疲了。通过创建索引,使很多应用模块的性能都得到了提升,不过有一天突然很多科室都反馈系统很慢,他也一时查不出原因,就把AWR报告发给我看,我一看发现BUFFER BUSY WAIT和ENQ: TX CONTENTION都十分严重。最后发现,在一张热表上,他居然创建了20多个索引。后来经过仔细分析,我们帮他重建了这张表上的索引,通过5个复合索引,绝大多数的应用性能都在可接受范围内。通过这个案例,他也才明白,原来即使是简单的索引优化工作,也是需要有专业技能作为支撑的。




