Oracle数据库应用系统的性能优化
2015-04-20于彦国
于彦国
摘 要 数据库性能的高低,对于企业管理水平和工作效率的提升都具有非常重要的作用。本文在分析数据库系统主要的性能评价指标基础上,提出了Oracle数据库应用系统的主要优化措施,从而为提升数据库性能提供一定的参考。
【关键词】Oracle数据库 性能优化 内存分配
1 引言
随着信息化技术的不断发展,越来越多的企业开始管理创新,广泛的应用信息化管理系统,从而提升企业的现代化管理水平。而信息化管理系统基本上都是建立在数据库系统的基础上的各种功能的实现,因此数据库系统性能的高低,就会直接影响应用系统的性能。而且一般来说当大型数据库在运行一段时间之后,由于存在着大量的数据,在运算速度上就会不同程度的受到影响,而计算机操作系统、内存、应用程序算法以及数据库服务器等诸多元素都会对数据库系统的性能构成重要的影响。
2 数据库系统主要性能的评价指标分析
数据库系统性能评价指标主要有以下几点:
2.1 系统吞吐量
这个指标指的是单位时间里,数据库系统所能够完成SQL语句的执行数量。通过是以每秒事务量(tps)来衡量。系统吞吐量越高,那么系统反应时间和执行速度也会越快。
2.2 用户响应时间
这主要指的是用户向数据库提交SQL执行语句开始,到数据库执行并向用户反馈结果集这段时间,也就是应用系统的反应时间,主要是以毫秒来衡量。通常分为CPU执行时间和用户等待时间两种。
2.3 数据库命中率
Oracle数据库系统中,用户进程所使用到的数据都会先集中在缓冲区,也就是会集中到系统内存中,这样能够提升数据读取效率,如果内存数据能够符合用户的需要,那么命中率就会越高,那么系统执行效率就会越高。第四,内存使用情况。这主要体现在共享内存和运行内存以及永久内存三个存储空间的科学分配上,内存利用效率越高,系统性能就会越高。第五,磁盘I/O速度。因为大量的数据都会存储在硬盘上,因此从硬盘数据转移到内存单位时间I/O规模越大,那么速度就会越快,就能够有效缩短用户响应时间,从而提升数据库系统性能。
3 Oracle数据库应用系统的优化技术分析
3.1 SQL语句的优化
SQL语句是操作数据库的脚本语言,如果SQL语句能够在优化器的作用下,能够充分利用数据库的索引表,那么就能够有效减少数据库扫描索引表的I/O次数,就能够提升数据执行效率。而优化SQL语句的主要步骤有以下几点:
(1)查找存有问题的SQL语句,对这些语句进行提前优化,发现问题就能够有效降低错误的读取数据库的频度,查找问题SQL语句的主要方法主要是通过搜集统计数据功能,在Oracle数据库管理系统中含有DBMSSTATS包以及ANALYZE解析命令,其中DBMSSTATS包主要是搜集有关链接数据行的相关统计数据,语法结构为:exec DBMS_SATS.gather_table_stats(owname,tablename,partnmae)。而ANALYZE解析命令则是分析数据簇的相关情况。其主要的语法结构为ANALYEZE CLUSTER Cluste_name Computer STATISTICS。然后再使用SQLTrace32对SQL语句进行分析,oracle中的udump管理区就会对SQL语句进行跟踪,对语法的解析和执行以及CPU时间和语法执行时间和逻辑读取的次数等参数进行记录,接着在通过Oracle Enterprise Manager Console图形工具获得数据库相应的性能指标信息,从而为SQL语句优化提供重要的参考。
(2)构建正确的SQL语句,提升查询效率。在使用SQL语句时要规避索引不能够和用户表空间建立在同一个磁盘上,这样会造成大量的资源浪费现象。另外WHERE的子句的查询顺序也要进行优化,注意从上至下的顺序进行查询,同时表之间的连接要出现在其他WHERE标识符之前,这样就能够有效减少调用数据库的数据量,从而提升SQL语句的执行效率。
3.2 Oracle内存优化调整
Oracle数据库管理系统中,其内存结构相对其他数据库管理系统而言相对复杂,主要影响的参数包括Shared pool,Database Buffer Cache以及Java Pool等。对于Oracle的内存结构的优化主要可以从下面几个方面着手:
3.2.1 对Shared pool进行优化
也就是对共享池的大小进行合理优化。共享池主要是缓冲区以及数据字典高速缓冲区的重要存放点,如果数据库缓冲区设置较小,那么就会影响到数据使用性能。如果缓冲区过大,随着使用次数的不断增加,就会造成大量的数据碎片,于是也会逐渐降低系统的性能。通常提升数据库缓冲区的命中率可以通过下面的执行语句来进行优化:Select(1-sum(reloads/sum(pins))) from v$librarycache。执行这个SQL语句之后,返回的结果如果小于0.95,那么就需要增加这个共享池大小,来提升缓冲区命中率。而优化数据字典缓存则可以通过下面的SQL语句来优化:select sum(1-(getmisses)/(sum(gets)+sum(getmisses))) from v$rowcache。如果这个SQL语句的执行值小于0.85,那也要增大共享池大小来优化内存结构。
3.2.2 对高速缓存进行优化
如果缓冲区中包含的高速缓存空间越大,那么载入到内存中的数据量就会越大,那么I/O存取效率就会越高,对此可以通过下面的语法来进行优化: select name,value from v$sysstat where name in (‘dbblokcgets,consistent gets,Physical reads)。执行这个SQL语句之后,如果返回的值小于0.85,那么就需要增加缓冲区高速缓存的值来提升数据库的性能。
3.2.3 优化日志缓冲区
如果日志缓冲区分配值太小,那么就没有充分的空间来防止重做条目,从而延长等待时间。对此可以从下面这个语句来查看日志缓存区是否满足需求:Select name,value from v$sysstat where name=redo log space requests。如果这个语句执行之后,得到的结果为0,那就不需要进行调整,否则就需要增加日志缓存,通常可以上调5%左右,然后重复执行这个语法,直到最终的返回值接近0。
3.3 针对oracle的表空间进行优化
表空间是Oracle数据库管理系统的重要创新,合理使用表空间能够有效提升数据库的性能。对此可以从下面几个方面来着手优化:
3.3.1 科学规划表空间
将数据和索引分到不同的表空间,这样能够有效降低I/O竞争。在修改应用上,将重演日志和归档日志进行分开,尽可能将90%以上的输入输出操作放在系统表空间中,或者在索引表空间和回滚表空间中。
3.3.2 优化表空间的结构
对此首先就要分离系统表空间,彻底规避在系统表空间中存储大量非系统用户对象,这样就会造成数据维护的数据调用重复读,从而降低数据库系能。然后就要分离索引段。特别要规避和相关的数据段存储在同一个表空间中,如果调用同一个数据,就会重复执行输入输出操作,同时还容易出现冲突,导致时间等待,从而降低数据库利用效率。最后要分离临时表空间,临时的表空间不应该和其他类型的段放在一起存储,这对于数据库性能的影响也非常明显。
4 结语
总而言之,Oracle数据库管理系统的功能非常强大,在应用Oracle数据库时,需要结合相应的硬件环境,同时在软件性能上采用科学的数据库布局模式,再加上合理的内存分配,SQL语句的优化以及表空间的优化,就能够有效提升Oracle数据库性能,从而提升应用系统的性能。
参考文献
[1]李可可.浅析Oracle数据库的性能优化方法[J].硅谷,2011(02).
[2]孙风栋,闫海珍.Oracle 10g数据库系统性能优化与调整[J].计算机技术与发展,2009(02).
作者单位
杭州市西溪医院 浙江省杭州市 310023