应用系统生命周期和Oracle数据库优化
Oracle数据库优化是Oracle管理工作中的最重要和最复杂的工作之一。由于数据库不是孤立的数据库,而是和一些应用具有紧密关系的,数据库往往是应用系统中最关键的部分,因此数据库的优化不能完全脱离应用而进行。实践证明,数据库管理维护人员与应用开发者的合作越好,数据库的优化越成功。
另外,数据库优化是从应用系统开始规划到应用系统退役整个过程中都在不断进行的,因此,数据库优化是一个长期的工作。很多用户会希望通过一次优化就达到一劳永逸的效果,而没有树立数据库优化工作长期性的观念,这样往往会导致数据库在长期的系统运行过程中没有得到必要的维护,以至于一旦发生问题,将会造成很大的损失。
很多人认为数据库优化是系统投入使用后DBA的主要工作,其实数据库优化是一个贯穿于应用系统整个生命周期的长期工作,数据库优化应该从需求调研和需求分析开始。从另一个方面讲,数据库优化也不仅仅是DBA的工作,而是需要全员参与的(业务人员、开发人员、DBA甚至项目和用户的领导层)。
数据库优化需要全员参与和贯穿整个开发过程,很多没有应用开发经验的DBA可能很难理解这一点,而这一点是数据库优化工作中最关键的一点。比如说,具有丰富开发经验的项目管理者都清楚,改变用户的操作习惯是一种十分困难的事情,而在用户没有形成习惯之前灌输一种操作方法要容易得多。因此在需求调研的时候说服用户不要使用那些对数据库开销十分大的操作方式,可以大大减少用户不适当操作而引起的对系统的开销。在需求调研和分析阶段要实现这一点,仅仅依靠应用开发人员是不够的,这就要求DBA或者有数据库优化经验的开发者在这个阶段就介入系统的开发工作,在必要的时候,甚至需要得到高层领导的支持。在软件开发和应用的各个阶段中,应该注意以下的问题:
- l在需求开发阶段,数据库优化的目的是说服业务人员接受对数据库影响比较小的操作习惯,而放弃那些对数据库性能有致命影响的操作习惯
- l在系统应用架构设计阶段,采用对数据库优化比较有利的应用体系架构。采用2层还是三层架构,使用B/S方式还是C/S方式,采用瘦客户端还是胖客户端,客户端和服务器之间数据交换的报文的格式和内容组织方式等都会影响数据库访问的性能
- l在系统逻辑设计阶段,定义合理的数据结构和数据操作方式
- l在物理设计阶段,设计合理的表和索引的物理存储结构
- l在编码阶段,编写效率比较高的SQL和PL/SQL
- l在系统测试阶段,对于关键业务进行完整的压力测试和系统性能评估,找出系统的瓶颈,尽快改进应用
- l在系统试运行阶段,DBA实时监控数据库的情况,及时发现数据库存在的问题,及时进行调整。对于应用中存在的性能问题,及时发现,并及时通知开发人员改进,并对改进后的应用进行测试评估
- l在系统运行阶段:系统投入正式运行后,数据库的优化工作还是十分艰巨的工作。DBA需要定期对数据库进行分析,找出目前系统消耗资源最大的对象,并找出改进的方法,进行改进。DBA还需要定期进行行链消除、索引重建、表空间碎片整理、历史数据备份整理和系统分析等工作
需求开发阶段的数据库优化
需求开发分为客户需求获取、需求分析两个阶段,最终产品为软件需求规格书(SRS)。在传统的概念中,这个需求开发和数据库优化是风马牛不相及的事情,而这个阶段往往是对系统性能优化最为关键的阶段。在这个阶段主要考虑的是软件的功能需求,而这些需求中,可能存在一些对系统性能影响极大的需求。操作习惯、界面风格、统计方法等都会影响数据库的性能。
以下是一个真实的案例,某个系统在显示主菜单的时候,需要显示一些复杂的实时统计分析结果,而这个统计分析结果只有很少数的人会真正关心,由于这个系统有几百个用户在使用,而主菜单是进入每个模块的必经之路,因此系统运行一段时间后,就出现了CPU方面的瓶颈。为了解决这个问题,DBA想尽了一切方法对SQL进行优化,但是收效甚微。最后深圳九鼎云州新创科技有限公司的优化专家提出了一个方案,重新修改了主菜单的界面,缺省情况下不显示实时统计结果,而只是提供一个显示实时统计结果的链接。而对于需要每次显示主菜单都显示实时统计结果的用户,只需要在自己的PROFILE中设置该选项就可以了。主菜单修改后,使用实时统计的用户只有1%左右,CPU的瓶颈问题也就迎刃而解了。
上述这种优化如果在需求分析阶段就能够完成,那么可以避免很多问题,而事实上类似的故事在不停的重演。究其原因,主要是参与需求开发的人员往往是业务人员和软件开发人员,这些人员缺乏数据库优化的基本知识和经验,无法从需求中发现隐含的性能问题。因此在需求开发阶段,专业的数据库优化人员的介入是十分重要的,具有数据库优化经验和软件开发经验的DBA可以在这个阶段就及时发现对于性能影响较大的需求,并且寻求解决方案,引导客户采用比较优化的操作模式。因此在需求开发阶段,“需求性能分析服务”是十分关键的服务。
需求性能分析服务是一种项目前期咨询服务,在需求获取阶段或者需求设计阶段,都可以使用。但是在不同的阶段,对服务提供者的要求不同。能够在需求获取阶段提供咨询服务的服务提供者,需要既是Oracle的专家,又是应用开发的专家,同时还是业务方面的专家。对于在需求设计阶段的咨询服务提供者,在业务方面的要求略低。咨询专家可以针对客户需求,从数据库性能的角度进行分析,对可能严重影响数据库性能的需求,提出解决方案,甚至否决需求。咨询专家的介入,会提高需求阶段的工程质量,为整个工程的最终顺利实施提供保障。
系统设计阶段包括系统架构设计、逻辑设计、物理设计等子阶段。系统架构对于数据库的性能影响也是十分巨大的,采用不同的系统架构,对后续的设计和应用开发都具有十分大的影响,不合理的系统架构甚至会造成项目的失败。架构设计人员往往缺乏数据库优化方面的经验,他们设计架构的原则是根据业务和应用软件开发来制定的,因此往往仅仅考虑了业务的拓展性以及应用开发的可控性,而过于灵活的应用架构可能会最终导致严重的性能问题,甚至导致项目失败。
加拿大某公司的供应链管理系统是全球排名前10名的供应链管理系统,在中小型供应链管理系统中,十分具有竞争力。但是由于其架构方面的原因,在大型企业和超大型企业中,一直无法得到很好的应用,其主要原因是架构方面局限性,导致了在并发量较大的环境下,产生了严重的性能瓶颈。而这种性能瓶颈是无法调优的,除非重新构造整个系统。
在逻辑设计阶段,需要进行数据模型的逻辑建模。作为一个具有十分丰富的逻辑设计经验的系统设计师来说,创建一套完美的符合第三范式的逻辑模型不是什么难事。但是从数据库的性能角度来考虑,第三范式不一定是最佳的选择,有时候为了避免性能问题,设计一定的冗余数据,也是十分必要的。不幸的是系统设计师往往都不具有足够的数据库优化经验,因此在这个阶段也存在形成性能瓶颈的风险。
在物理设计阶段,需要对数据库进行物理建模。物理建模是决定系统性能的关键,IO负载如何均衡、如何避免行链、如何避免表空间碎片、如何创建合理的索引,等等,都需要在这个阶段设计完成。在这个阶段需要经验十分丰富的Oracle DBA和系统设计人员共同来完成。而事实上,在这个阶段,往往缺乏有经验的DBA参与,普通应用软件开发商的DBA是无法胜任这项工作的。
由于系统设计阶段对最终系统的性能影响如此巨大,因此在系统设计阶段需要一种综合性的咨询服务,也就是我们常说的“系统模型优化服务”。
系统模型优化服务是一种综合性的服务,服务提供商需要对应用体系架构、逻辑模型、物理模型进行综合的分析,找出性能瓶颈,并根据系统要求,提出解决方案。为了更好地进行系统设计,系统模型优化服务应该贯穿系统设计的全过程,包括:
- l数据库性能优化与系统设计培训课程
- l应用系统架构设计评审
- l应用系统逻辑模型评审
- l应用系统物理模型评审
软件开发阶段的数据库优化
如果在需求和设计阶段避免了各种性能瓶颈,那么应用软件开发阶段的性能优化工作就会轻松很多。但是由于软件开发阶段涉及的人员较多,并且每个开发人员的能力有所不同,因此在这个阶段也是容易造成性能问题扩散的主要阶段。这个阶段产生的性能问题往往是分散的,集中于某些不够优化的SQL代码。其修复的代价也低于前面两个阶段。在应用软件开发阶段,“应用开发性能优化套餐”可以帮助应用开发商避免性能问题,套餐内容包括:
- lSQL与数据库性能培训课程
- lPL/SQL性能优化培训课程
- l专职DBA服务
专职DBA服务的主要内容是派遣专职的DBA参与开发,该DBA的主要任务是帮助开发人员分析SQL的性能并协助进行SQL优化。专职DBA的另外一个职能是对大型SQL进行审核,没有通过审核的SQL必须在开发阶段进行优化改造。有了专职DBA的参与,可以在开发阶段减少大量的性能瓶颈。
系统测试阶段的数据库优化
如果在前面的各个阶段,都已经对数据库的性能进行了优化,那么系统测试阶段是解决遗留系统性能问题的最佳阶段,由于系统开发已经完成,因此集成测试和系统测试成为可能,很多在系统测试阶段才可能暴露出来的性能问题可以得到充分的暴露,而且由于系统还没有正式上线,因此系统调整和优化的代价也很小。
在实际情况中,测试阶段大家的主要精力都集中在解决软件BUG方面,往往忽视了对系统性能和数据库性能的测试。由于开发队伍缺乏压力测试的能力,因此压力测试往往被省略了。这些省略的后果往往就是系统上线后产生严重的性能问题。在系统测试阶段,“压力测试服务”和“系统性能评估服务”是两种十分重要的服务。
压力测试服务是服务公司为客户提供的专业的测试服务,可以根据客户应用的特点,建立一套模拟的数据和模拟的业务运行环境,并在这个环境中获得第一手的系统性能参数,找到隐藏的性能瓶颈。以便于客户在上线前解决存在的性能隐患。
系统性能评估服务的目的是为客户进行系统生命周期中的性能预估,可以根据目前的情况,估算几年后系统运行的情况,以及可能出现的系统瓶颈。评估报告可以让客户做出系统是否能够上线的决策。也可以使客户在系统运行生命周期内进行系统升级和扩容的规划。
某移动公司在开通彩铃业务1年后,由于业务量发展十分迅速,导致系统性能出现严重的瓶颈,客户投诉大幅度上升,甚至一度暂停新业务开户,造成了重大的损失。因此,该移动公司在扩容彩铃系统的时候,聘请了九鼎云州的咨询人员,对系统进行性能评估,根据其业务发展的实际情况,对2年内系统各项指标进行估算,找出不达标的指标,要求供应商改进。在评估过程中,九鼎云州的咨询人员发现了系统中存在的大量性能隐患,及时帮助供应商解决了性能问题,该系统上线后,完全达到了移动公司的设计要求,取得了良好的效果。
系统运行阶段的数据库优化
系统运行阶段的数据库优化是传统意义上的数据库优化范畴的工作。当系统正式上线后,系统的优化往往受到很多的限制,因此优化的手段也较前几个阶段少,优化的成本也大大增加。在系统运行阶段,往往是由于缺乏严格的日常维护,因此很多系统性能隐患没有及时发现,等到发现问题的时候,往往已经错过了解决问题的最好时机,并且由于生产系统给问题解决的时间有限,往往造成解决问题的时间严重不足。
为了避免上述问题的出现,在系统运行阶段,加强系统日常的监控和维护是十分必要的。在这个阶段,大量的咨询服务公司提供了丰富的服务项目,九鼎云州也在长期的数据库维护工作中,和客户一起,不断完善服务的种类和内容,以满足客户日益增长的IT服务需求。以下是几种特别贴近企业级用户的服务。
现场和远程在线护航服务:在系统繁忙的时段,咨询人员在现场值守,协助解决问题。比如对于电信公司,在每个月月初的几天,是出帐的繁忙期,在这几天里,很容易出现一些突发性的性能问题,如果有专业DBA在现场支持,可以降低这几天的业务风险。现场护航服务的价格较为昂贵,因此对于资金不是十分充裕的客户来说,选择远程在线护航服务是一种变通的做法,其效果和现场护航服务类似,但是可以节约大量的费用。
远程离线护航服务:在线护航需要服务提供者能够连到客户的系统进行服务,由于种种原因(当然价格也是其中的因素之一),客户无法使用在线服务,那么离线的远程护航服务也是一种不错的选择。客户可以把现场采集到的数据,通过电子邮件发给服务提供商,由服务提供商的技术人员对这些数据进行离线分析,对于系统存在的问题,提出合理的建议。离线分析数据一般包括Statspack报告、awr报告、addm报告、以及服务提供商提供的专用采集脚本采集的数据。数据分析的周期可以是每天、每周或者每月。
某大型电器制造企业售后服务再造系统是一个十分庞大的业务系统,平时在线使用的人数超过8000人,业务遍布全球。我们曾经为其提供了有效的离线护航服务,每天现场技术人员会生成上午和下午高峰期间的STATSPACK报告,通过电子邮件发送给咨询顾问。咨询顾问每天对这些报告进行分析,及时把建议反馈给现场技术人员。在此期间,州通过STATSPACK报告的分析,协助现场技术人员解决了大量的性能问题。有一次九鼎云州的技术人员从STATSPACK报告中的某些指标,发现系统中可能有索引损坏了,通知现场人员的进行时候,现场技术人员还没有发现,只是发现今天某个业务模块的投诉增加,经过确认,确实是一个索引损坏,导致了某个业务走全表扫描,业务产生了积压。
数据库监理服务:对数据库建立一套日常监控、数据自动采集和故障报警体系。这种服务需要相关的软件配合,仅仅依靠人工是较难实现的。通过适当的应用软件,可以帮助客户建立客户化的监控平台以及标准的监控体系,帮助客户实现数据库监控的简单化、标准化和自动化。九鼎云州的数据库综合监控与优化服务套餐就是一种典型的数据库监理服务。对于企业用户来说,数据库监理是一种规避风险的有效手段,通过对数据库进行有效的监理,可以提高系统的无故障运行时间,确保系统性能的稳定。由于数据库监理的复杂性,需要服务提供者具有较强的综合服务能力,并且有较强的业务背景,因此能够实施数据库监理服务的服务提供商还十分少,这种服务在业界还少为人知。
数据库监理服务需要有一个强大的数据库监控平台作为支撑,作为数据库监控平台,应具有以下功能:
- l能够集中管理分散的数据库系统,做到集中、实时地监控并能够在系统隐患发生前提供报警
- l具有独特的高智能分析功能,可以使ORACLE数据库发挥近乎极致的效率,并且是对于ORACLE数据库的维护简化为每天只需检查生成的智能报告,查看是否有系统隐患产生。
- l如果有了系统隐患,可提供详细的解决建议。
- l能够完整保留历史运行数据,以提供将来故障定位、历史分析时所需的数据
- l在新业务上线时或系统优化时,可以作为优化、测试与调整的工具,帮助定位问题根源,提供容量使用情况,以作为决策的依据
通过数据库监理的服务,可以向用户提供一种预防性的监控管理方案:
- l通过集中管理、集中监控的手段实现分散数据库的简单、有效、自动化管理
- l通过自动化的评价报告确定系统现存问题和准确现状
- l进而通过专业的分析,定位系统瓶颈,并采取针对解决措施
- l提供调优辅助,消除系统存在问题
- l确认调优措施的实施效果,继而重新确定系统存在的新问题和状态。
当问题被发现后,具有实施能力的服务提供商可以及时为客户提供合理的解决方案,并协助客户消除隐患,解决问题。通过以上过程的不断反复循环,使系统的问题在萌芽状态被发现并消除。使用户每时每刻清晰的了解自己系统的运行状况和存在的问题,并提示问题解决方案和系统运行管理建议。从而使用户系统常年保持安全性和高效率的最佳平衡状态。使用户的设备投资获得最大的经济收益。
数据迁移和数据重组服务:无论是出于性能的考虑还是其他原因,对于生产系统进行数据迁移和重组都是十分困难的,特别是针对于海量数据库的数据迁移和重组。目前这类服务主要由IBM/HP/SUN/EMC等设备供应商提供,而由于设备供应商不是专业的数据库服务提供者,因此在数据迁移和重组过程中,没有充分考虑到数据库优化的需求,在进行数据迁移和重组的过程中丧失了一次极好的优化机会。如果数据库咨询服务提供商和设备供应商共同来完成数据迁移和重组工作,那么可以在数据迁移和重组过程中,针对系统存在的IO方面的问题进行一次优化,从而达到事半功倍的效果。
某联通公司的数据库性能出现问题,IO出现严重瓶颈。在其进行存储扩容的时候,我们和HP的工程师一起对扩容后的存储进行了合理的规划,并根据目前的性能瓶颈,制定了合理的二次条带方案。数据迁移后,IO瓶颈得到了彻底解决,数据库的性能提高了2倍以上。
结论
数据库服务是贯穿整个系统生命周期的重要活动,选择合理的数据库优化服务,可以延长系统的生命周期,节约大量的资金。因此系统建设的过程中,应该尽早引入专业的数据库咨询服务。