影响Oracle数据库应用系统性能的因素分析与改进

2013-03-19 03:13:59
网络安全技术与应用 2013年9期
关键词:数据量语句阶段

孟 萍 刘 石

(大连东软信息学院 辽宁 116023)

0 引言

Oracle作为一种大型的数据库系统被广泛应用在电力、电信、金融、民航等重要部门。在实际应用中,随着系统中数据的增加,访问量的加大,常常会出现系统响应迟缓,性能下降的问题。围绕数据库应用系统的性能优化,目前在业界已有一些研究成果。本文从软件产品生命周期的设计、编码及部署阶段入手,结合多年的实际工作经验,分析了在软件开发过程中影响性能瓶颈的诸多因素,给出了基于Oracle数据库管理系统的优化方法及策略。

1 设计阶段上的优化

设计阶段是软件开发中仅次于需求分析之后的第二阶段,如果能够进行科学、合理的设计,能够有效避免许多在后继阶段中引起的系统性能问题。一旦数据库设计付诸实施,我们将很难在应用环境中改变数据库的设计。因此,本阶段的控制措施十分重要! 这里从性能分析的角度,重点阐述数据库对象的优化设计和应用逻辑实现设计两部分。

1.1 数据库对象设计

数据库对象优化设计的重点在数据库基表设计、索引设计和数据库系统整体性能设计三个方面。

1.1.1 数据库基表设计

人们在开始进行数据库基表设计的时候,很容易忽略基表在数据量很大的情况下,是否会引起应用性能下降问题,以及日常维护、备份恢复、数据清理等工作是否也会因此而受到影响。而往往在系统投入运行以后才发现随着系统业务量的增大,正常的使用、日常的备份、以及数据清理等操作会变得越来越耗时,甚至达到无法在业务给定的时间内完成的地步,给客户及使用单位带来许多无法想象的麻烦。因此系统的数据库基表的设计十分重要。

对于大的数据库基表,我们可以采用数据库分区技术来优化产品的应用性能,同时也能大大简化DBA对于这些大尺寸库表的日常维护工作,做到防患于未然。

1.1.2 索引设计

在数据库设计中,另一个与应用系统性能有很大关系的问题是建立合适的索引。设计好的索引结构,可以避免查询时的全表扫描,加快查询速度。而在实际应用中,常常没有制定有效的索引管理策略,许多应用系统的索引都是在开发人员在编写代码时看到需要索引就创建一个索引,而较少甚至根本不去查看和分析已有的索引是否可以利用。随着应用功能的扩展,索引数量只是简单地增加,而很少考虑重复利用、合并和删除重复索引。最终导致雷同或可合并的索引大量存在,不但消耗大量的空间,还影响库表记录的增、删性能。

1.1.3 数据库系统整体性能设计

这部分设计的重点在于尽量减少I/O争用、分散I/O。如果对于基表和索引的存储位置没有进行合理分布,则很容易在系统中造成热点数据,使系统的并发处理能力大打折扣。在实际应用中一般可遵循以下几条策略:

将表和索引分散在不同的I/O单元上;

将需要经常关联的表分散在不同的I/O单元上;

对于热点访问的基表和索引,尽量分散在尽可能多的数据块甚至不同硬盘上。可以将基表和索引存放在RAID0或RAID5的磁盘阵列中;或使用很大的PCTFREE存储参数,使数据量尽量分散在不同的数据块中,使数据稀疏化;

应用Oracle的LMT本地表空间管理和ASSM自动段存储管理技术管理数据块的表空间和基表索引等存储对象,以提高I/O请求并发率。

1.2 应用逻辑设计

在应用逻辑设计过程中,较普遍存在的问题是仅关注如何通过SQL语句实现应用逻辑的功能,但很少分析SQL语句应以什么样的执行计划运行效率最佳;很少分析执行计划是应确保始终不变,还是需要随着数据分布的变动而相应的变动,以及如何变动进行设计。

在一个应用系统中存在大量的SQL语句,很难做到针对每一条SQL语句都进行完善的分析设计工作。因此,可以运用“2-8原则”的思想,对执行时间长,或并发量大的SQL语句精心设计“理想执行计划”,使其性能得以优化。

2 编码阶段上的优化

在数据库应用系统中,造成应用程序反应缓慢、系统资源消耗大的直接原因常常是不良的SQL语句。往往一个不良的SQL语句会导致整个数据库系统高负荷运转,甚至对外暂停服务。因此在编码阶段应首先对SQL语句进行优化。

另外尽量使用存储过程。有些不需和客户端交互太多、处理的数据量较大的程序,例如报表,可以使用存储过程实现。这样可以减少网络流量,而且存储过程本身是编译好的,经过一些优化处理。降低事务执行的粒度。某些业务处理的数据量较大,如果写成一个SQL语句或放在一个事务中,执行起来会占用系统很多资源,影响其它业务的执行,可以考虑降低粒度,分成多次执行。

3 部署阶段上的优化

在此阶段中经常会遇到在开发环境执行效率很高的应用部署到生产系统中后,性能却很不理想的情况,引发这种情况很多时候是因为部分SQL在部署到生产环境之后,由于实际的数据分配与测试环境不同,导致Oracle的CBO生成了不同于开发环境下生成的执行计划。

在这一阶段,我们可以从开发环境中提取出最优的SQL执行计划集合,部署到生产系统中,以固定需要固定执行计划的SQL。此外在部署阶段还应该注意不断跟踪、优化不良的SQL语句。

4 结束语

Oracle数据库应用系统的性能优化是一个复杂、繁琐的系统工程,涉及的方面有很多,我们认为系统性能在70%以上由应用系统的结构设计和SQL语句来决定,数据库端可调性只有20%左右,因此这里我们重点强调了产品开发在设计、编码及部署阶段在性能方面容易引起瓶颈的因素及解决方法,希望能在产品投入使用之前就引起性能方面的重视及改善。实践证明,上述措施行之有效。

当然对系统的优化调整不是一次性的,还需要在使用过程中不断反复调整,但如果在产品实施之初就开始注意性能的优化问题,对以后的系统维护会减少很多负担,从而提升软件产品的整体性能。

[1] 陈峰. 关于改善ORACLE数据库应用软件产品性能品质的研究: 硕士学位论文. 北京: 北京邮电大学, 20011.

[2] Thomas Kyte. 苏金国 王晓振等译. Oracle 9i&10g编程艺术.人民邮电出版社, 2009

[3] 李欣, 罗琦, 李春华. Oracle 数据库性能的优化设计. 郑州大学

猜你喜欢
数据量语句阶段
关于基础教育阶段实验教学的几点看法
科学与社会(2022年1期)2022-04-19 11:38:42
基于大数据量的初至层析成像算法优化
计算Lyapunov指数的模糊C均值聚类小数据量法
高刷新率不容易显示器需求与接口标准带宽
重点:语句衔接
宽带信号采集与大数据量传输系统设计与研究
电子制作(2019年13期)2020-01-14 03:15:18
在学前教育阶段,提前抢跑,只能跑得快一时,却跑不快一生。
莫愁(2019年36期)2019-11-13 20:26:16
精彩语句
大热的O2O三个阶段,你在哪?
营销界(2015年22期)2015-02-28 22:05:18
两岸婚恋迈入全新阶段
海峡姐妹(2015年6期)2015-02-27 15:11:19