国家邮政局信息技术局 焦 健
电子汇兑系统存在的性能问题主要表现为OLTP处理能力不理想,经常出现联机交易处理时间长、交易大量排队的现象。究其原因,系统硬件资源并不是瓶颈,问题出在了应用系统对数据库的访问效率上。因此,优化ORACLE数据库的性能是解决问题的关键。
优化工作一般包括针对数据库的应用设计优化、数据库参数优化、I/O优化和操作系统参数优化等几个方面。其中应用设计的优化工作应该在应用系统开发之前完成,其他几个方面的优化工作主要在应用系统运行过程中进行。
一、针对数据库的应用设计优化
在保证数据正确、处理安全的前提下,获得最快的面对客户的业务处理速度应该是优化工作所追求的最终目标。在很大程度上,影响数据库请求处理速度的原因是数据库资源的访问冲突,所以,应用设计优化的主要目标是减少冲突。
1.软件架构优化
为了保证对外营业期间联机交易能够得到最快的处理,用于满足内部管理需要的功能处理应该放在次要的位置(如历史数据查询和产生报表),要限制这部分处理在营业期间对数据库资源的占用,尽量避免与联机事务处理发生资源上的冲突,优先满足对响应时间要求高的联机交易的需要。
查询/报表这部分处理通常用时较长,数据库资源占用也较多,应考虑与联机事务处理分离。报表应尽量放入晚间的批处理作业中处理;营业期间大的联机查询事务应尽可能减少,并且要限制查询范围和查询条件的随意性,复杂的历史数据查询可考虑放在主机以外的设备上进行。
联机事务处理的流程也应尽可能简化、数据库操作尽可能少,一些不必须的处理可以放到批处理作业中,以缩短联机交易的处理时间。另外,可以通过中间件的优先级设置机制限制系统中对实时性要求不高的辅助功能的活动(比如电子汇兑系统中的清分功能),以保障联机交易的响应时间。
2.数据库设计优化
合理设计数据库表,避免表与表之间过多的关联。如果在这些表中包含大表,整个查询的性能会受到很大影响。
合理设计数据库表的层次,避免各子系统和功能模块对数据库表的访问过于集中,尤其是在业务繁忙的时段。可以根据各个功能对数据的需求量设计一些中间表、接口表,避免对数据库的大量操作都集中在几个大表上。
为了减小联机事务访问的数据量,可以根据业务数据的生命周期,将不同阶段的数据存放在不同的数据库表中,以减少单个表的数据量,从而降低资源的开销。
对于很大的表,可以利用数据库的分区机制,将表中的行动态地分到一些小表中。
索引的建立有助于快速访问数据表中的数据,但索引由于其内在的结构,存在某些内在的开销,而这些开销有可能会超过进行顺序全表扫描的成本,因此,优化索引是十分必要的。同时,不要在一个表上建立太多的索引。另外需要注意,一定要将数据表和相应的索引分开存放在不同的表空间中,以减小I/O的开销。
3.程序设计优化
在ORACLE数据库应用中,80%的性能问题是由不良的SQL语句引起的,SQL语句的执行效率最终决定了ORACLE数据库的性能,因此,优化SQL语句是至关重要的。SQL语句的优化工作非常具体,在这里不做过多的讨论。
二、数据库参数优化
数据库参数优化的主要工作是在应用系统运行过程中,根据性能监控的实际情况,不断进行调整以满足应用的需要,使数据库运行在最佳的状态。影响ORACLE数据库性能的参数很多,这里主要根据电子汇兑系统优化过程中遇到的实际问题,对几个重要组成部分的优化策略进行分析。
1.内存参数的调整
内存参数的调整主要是指对ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据库缓冲区和重做日志缓冲区。通过合理调整SGA各个结构的大小,可以极大提高系统的性能。
SGA的调整,主要的依据是各个内存结构的命中率。较高的命中率说明数据库操作充分利用了内存,效率较高;而较低的命中率则意味着ORACLE必须进行过多的磁盘I/O操作,必然会影响性能。SGA的调整内容包括:(1)检查共享池区中的库高速缓存和数据字典高速缓存的命中率,如果低于90%,就需要增加共享池的大小。(2)检查数据库缓冲区的命中率,如果低于90%,就需要增加数据库缓冲区的大小。(3)计算重做日志缓冲区的申请失败率,如果高于1/5000,则说明重做日志缓冲区开设太小,需要扩充。