如何调整Oracle应用系统性能是什么


摘要:通过探讨和研究Oracle服务器和Client/Server嘚特点和原理阐述了提高、调整Oracle应用系统性能是什么的一些原则和方法。

关键词:Oracle;客户/服务器;系统全程区;网络I/O;回滚段

Oracle 数据库廣泛应用在社会的各个领域,特别是在Client/Server模式的应用但是应用开发者往往碰到整个系统的性能随着数据量的增大显著下降的问题,为了解決这个问题从以下几个方面:数据库服务器、网络I/O、应用程序等对整个系统加以调整,充分发挥Oracle的效能提高整个系统的性能。

1 调整数據库服务器的性能

Oracle数据库服务器是整个系统的核心它的性能高低直接影响整个系统的性能,为了调整Oracle数据库服务器的性能主要从以下幾个方面考虑:

1.1 调整操作系统以适合Oracle数据库服务器运行

Oracle数据库服务器很大程度上依赖于运行服务器的操作系统,如果操作系统不能提供最恏性能那么无论如何调整,Oracle数据库服务器也无法发挥其应有的性能

1.1.1 为Oracle数据库服务器规划系统资源

据已有计算机可用资源, 规划分配给Oracle服務器资源原则是:尽可能使Oracle服务器使用资源最大化,特别在Client/Server中尽量让服务器上所有资源都来运行Oracle服务。

1.1.2 调整计算机系统中的内存配置

多数操莋系统都用虚存来模拟计算机上更大的内存它实际上是上的一定的磁盘空间。当实际的内存空间不能满足应用软件的要求时操作系统僦将用这部分的磁盘空间对内存中的信息进行页面替换,这将引起大量的磁盘I/O操作使整个服务器的性能下降。为了避免过多地使用虚存应加大计算机的内存。

1.1.3 为Oracle数据库服务器设置操作系统进程优先级

不要在操作系统中调整Oracle进程的优先级因为在Oracle数据库系统中,所有的后囼和前台数据库服务器进程执行的是同等重要的工作需要同等的优先级。所以在安装时让所有的数据库服务器进程都使用缺省的优先級运行。

Oracle数据库服务器保留3个基本的内存高速缓存分别对应3种不同类型的数据:库高速缓存,字典高速缓存和缓冲区高速缓存库高速緩存和字典高速缓存一起构成共享池,共享池再加上缓冲区高速缓存便构成了系统全程区(SGA)SGA是对数据库数据进行快速访问的一个系统全程區,若SGA本身需要频繁地进行释放、分配则不能达到快速访问数据的目的,因此应把SGA放在主存中不要放在虚拟内存中。内存的调整主要昰指调整组成SGA的内存结构的大小来提高系统性能是什么由于Oracle数据库服务器的内存结构需求与应用密切相关,所以内存结构的调整应在磁盤I/O调整之前进行

1.2.1 库缓冲区的调整

库缓冲区中包含私用和共享SQL和PL/SQL区,通过比较库缓冲区的命中率决定它的大小要调整库缓冲区,必须首先了解该库缓冲区的活动情况库缓冲区的活动统计信息保留在动态性能表v$librarycache数据字典中,可通过查询该表来了解其活动情况以决定如何調整。

1.2.2 数据字典缓冲区的调整

数据字典缓冲区包含了有关数据库的结构、用户、实体信息数据字典的命中率,对系统性能是什么影响极夶数据字典缓冲区的使用情况记录在动态性能表v$librarycache中,可通过查询该表来了解其活动情况以决定如何调整。

Gets列是对相应项请求次数的统計;Getmisses 列是引起缓冲区出错的数据的请求次数对于频繁访问的数据字典缓冲区,sum(getmisses)/sum(gets)<10%~15%若大于此百分数,则应考虑增加数据字典缓冲区的容量即需调整初始化参数shared_pool_size来重新调整分配给共享池的内存量。

1.2.3 缓冲区高速缓存的调整

用户进程所存取的所有数据都是经过缓冲区高速缓存來存取所以该部分的命中率,对性能至关重要缓冲区高速缓存的使用情况记录在动态性能表v$sysstat中,可通过查询该表来了解其活动情况鉯决定如何调整。

dbblock gets和consistent gets的值是请求数据缓冲区中读的总次数physical reads的值是请求数据时引起从盘中读文件的次数。从缓冲区高速缓存中读的可能性嘚高低称为缓冲区的命中率计算公式:

的值表示数据块大小的字节数,可查询 v$parameter 表:

在修改了上述数据库的初始化参数以后必须先关闭數据库,在重新启动数据库后才能使新的设置起作用

磁盘的I/O速度对整个系统性能是什么有重要影响。解决好磁盘I/O问题可显著提高性能。影响磁盘I/O的性能的主要原因有磁盘竞争、I/O次数过多和数据块空间的分配管理

为Oracle数据库服务器创建新文件时,不论是表空间所用的数据攵件还是数据事务登录所用的日志文件都应仔细考虑数据库服务器上的可用磁盘资源。如果服务器上有多个磁盘则可将文件分散存储箌各个可用磁盘上,减少对数据库的数据文件及事务日志文件的竞争从而有效地改善服务器的性能。对于不同的应用系统都有各自的数據集应当创见不同的表空间分别存储各自应用系统的数据,并且尽可能的把表空间对应的数据文件存放在不同的磁盘上这种从物理上紦每个应用系统的表空间分散存放的方法,可以排除两个应用系统竞争磁盘的可能性数据文件、事务日志文件分别存放在不同的磁盘上,这样事务处理执行的磁盘访问不妨碍对相应的事物日志登记的磁盘访问如果有多个磁盘可用,将两个事物日志成员放在不同的磁盘驱動器上就可以消除日志文件可能产生的磁盘竞争。应把一个应用的表数据和索引数据分散存放不同表空间上并且尽量把不同类型的表涳间存放在不同磁盘上,这样就消除了表数据和索引数据的磁盘竞争

1.4 调整数据库服务器的回滚段

回滚段是一个存储区域,数据库使用该存储区域存放曾经由一个事务更新或删除的行的原始数据值如果用户要回滚一个事务所做的改变,那么数据库就从回滚段中读回改变前嘚数据并使该事务影响的行改变为它们的原状态回滚段控制着数据库处理事务的能力,因而在数据库成功中起着关键性的作用不管数據库的其它部分设计得多好,如果它设计得不合理将会严重影响系统的性能。建立和调整回滚段的原则如下

分离回滚段是指单独为回滾段创建一个以上的表空间,使回滚段与数据字典、用户数据、索引等分离开来由于回滚段的写入与数据和索引的写入是并行进行的,洇此将它分离出来可以减少I/O争用如果回滚段与数据不分离,倘若要某个表空间脱机或撤消那么在该表空间中的各个回滚段没有全部脱機之前,不能将这个表空间脱机或撤消而一旦该表空间不可用,则该表空间中的所有回滚段也不能使用这将浪费所有分配的磁盘空间。所以独立回滚段可使数据库管理变得容易。回滚段的经常性收缩使得表空间的自由块更容易形成碎片。分离回滚段可以减少数据库表空间的碎片产生

1.4.2 创建不同大小的回滚段群

对于一些联机事物处理,他们一般是频繁地对少量数据进行修改创建许多小的回滚段对之囿利。每一个事物的入口项只能限于一个回滚段回滚段应该充分大以容纳一个完整的事物处理,因此对一些较大型事物需要较大型的囙滚段。极个别脱机处理事物会产生大量的回滚信息这时需要一个特大号的回滚段来处理。根据这些理论在Oracle数据库服务器中针对上述3種事物处理创建三组:小事物组、较大事物组、特大事物组等大小不同的回滚段群,并且将之分散到3个不同的表空间上群内大小相同,應能满足该组事物处理的最大要求

1.4.3 创建数量适当的回滚段

一般回滚段数量与并发事物个数有关,以下给出由于并发事物个数而应建立回滾段的参考数:

并发事物(n)   回滚段数
 

Client/Server环境中的应用处理是分布在客户应用程序和数据库服务程序之间的在 Client/Server环境中Client与Server之间的网络I/O昰整个系统性能是什么提高的瓶颈,一个客户应用程序引起的网络I/O越少应用及整个系统的性能越好。减少网络I/O的最重要的一条原则:将應用逻辑集中在数据库服务器中

2.1 使用Oracle数据库的完整约束性

当为应用建表时,应当为一些有特殊要求的数据加上适当的完整性约束这样僦能实现由数据库本身而不是应用程序来约束数据符合一定的条件。数据库服务器端的完整约束的执行操作是在比SQL语句级别更低的系统机淛上优化它与客户端无关,只在服务器中运行不需在Client 端和Server端之间传递SQL语句,有效地减轻网络I/O负担

2.2 使用数据库触发器

完整约束性只能實现一些较简单的数据约束条件,对一些较复杂的事物处理规则就无能为力这时最好不要在应用程序中实施复杂的程序控制,而是应当采用数据库触发器来实施复杂的事物规则数据库触发器能实现由数据库本身,而不是应用程序来约束数据符合复杂的事物处理规则,並且容易创建便于管理,避免大量的网络I/O

例如:将当前表A中成为历史的记录从A表中转储到历史表B中,表示为Lsbs

在应用程序中实现:       用数据库触发器实现:
                 End delete1;

在应用程序中实现时,所有的SQL命令请求传送的数据都要通过网络茬Client端和Server端进行交换而不像数据库触发器一样,SQL本身在Server端不需要通过网络传输数据。当进行操作的数据量相当大时并且多个用户同时操作时,通过在应用程序中实现复杂的控制必将增大网络I/O的负荷,使整个系统的性能降低而用数据库触发器能完全避免这种情况发生。

2.3 使用存储过程、存储函数和包

Oracle的存储过程和存储函数是命名的能完成一定功能并且存储在Server端的PL/SQL的集合包是一种把有关的过程和函数组織封装成一个数据库程序单元的方法。它们相对于应用程序的过程、函数而言把SQL命令存储在Server端。使用存储过程和存储函数应用程序不必再包含多个网络操作的SQL语句去执行数据库服务器操作,而是简单调用存储过程和存储函数在网络上传输的只是调用过程的名字和输出結果,这样就可减少大量的网络I/O

例如:基表A、B的定义:name char(20);detail char(10);A表100万记录,应用程序将从基表A中检索detail列符合给出条件的记录并将之插入基表B。

如果在Developer/2000 From中按钮触发器直接用PL/SQL实现和把它改写为一个Oracle存储过程然后在From中调用此过程实现比较,后者性能显著提高

在考虑使用上述3种方法时:首先考虑使用完整约束性。对于数据库触发器和存储过程如果需要所有访问数据库的程序自动实施一定规则或检查,那么使用數据库触发器;如果只需对少数的程序实施一定的规则或检查则可创建一个过程,让有关程序调用这个过程

SQL语句的执行速度,可以受佷多因素的影响而变化但主要的影响因素是:驱动表、执行操作的先后顺序和索引的运用。可以由很多不同的方法间接地改变这些因素以达到最优的执行速度。这里主要探讨当对多个表进行连接查询时应遵循的优化原则:

(1) 用于连接的子句的列应被索引、在Where子句中应尽量利用索引而不是避开索引。

(2) 连接操作应从返回较少行上驱动

(3) 如果所连接的表A和B,A表长度远远大于B表建议从较大的A表上驱动。

(4) 如果Where子呴中含有选择性条件,Where No=20将最具有选择性部分放在表达式最后。

(5) 如果只有一个表有索引另一表无索引,无索引的表通常作为驱动表如A表嘚No列以被索引,而B表的No 列没被索引则应当B表作为驱动表,A表作为被驱动表

(6) 若用于连接的列和Where子句中其他选择条件列均有索引,则按各個索引对查询的有效性和选择性分别定出级别结合表中具体数据构成情况,从中选出优化路径一般需要考虑:子句中哪些列可以使用索引、哪些索引具有唯一性及被查询表行数目等。

3.2 建立和使用视图、索引

利用视图可以将基表中的列或行进行裁减、隐藏一部分数据并苴能够将涉及到多个表的复杂查询以视图的方式给出,使应用程序开发简洁快速利用索引可以提高查询性能,减少磁盘 I/O优化对数据表嘚查询,加速SQL语句的执行但任何时候建立索引都能提高性能,何时建立索引应当遵循以下原则:该表常用来在索引列上查询该表不常哽新、插入、删除等操作,查询出来的结果记录数应控制在原表的2%~4%

当一个客户应用程序插入一行或用一个查询来向服务器请求某行时,不是发送具有单个行的网络包而是采用数组处理,即把要插入的多个行或检索出的多个行缓冲在数组中然后通过很少的几个包就可茬网上传送这些数组。例如一个给定的Select语句返回2000行数据,每行平均大小为40个字节数据包的大小为4kB,而数组大小参数(arraysize)设置为20 则需从服務器发送100个数据包到客户机。如果简单地把(arraysize)设置为2000那么同样的操作只需要传送 20个数据包。这样就减少了网络的传输量提高了所有应用嘚性能。

我们在开发应用程序时遵循上述的方法和原则,对系统进行调整收到了令人满意的效果。但是应当指出由于客户机、网络、服务器这3个相互依存的组成部分都必须调整和同步才能产生最佳的性能,因此还应根据系统的具体情况具体分析和调整。

内容提示:调整Oracle应用系统性能是什么的原则和方法

文档格式:PDF| 浏览次数:0| 上传日期: 00:46:34| 文档星级:?????

1、oracle采用自下而上的解析顺序因洏能过滤掉最大记录数量的条件应放在where语句的末尾,如id=。

1、适当的用索引能大大提高检索效率。但索引需要空间存储及定期维护每當有记录在表中增减或索引列被修改时, 索引本身也会被修改。

2、索引需要注意避免在索引上使用not,使用计算使用is null或is not null及通配符%,他们将促使oracle停用索引

3、如果检索数量超过表中30%的记录数,则该索引没有显著的效率提高

3、order by 语句加在索引列,最好是主键上

发布了49 篇原创文嶂 · 获赞 36 · 访问量 3万+

我要回帖

更多关于 系统性能是什么 的文章

 

随机推荐