Oracle的性能优化剖析

  • 格式:doc
  • 大小:107.50 KB
  • 文档页数:15

Oracle的性能优化:

要想让你的Oracle数据库软件运行的效率比较高,就需要在性能上进行合理的优化。

Oracle的性能优化可以从四个不同的角度进行,首先是对操作系统级的调整(包括硬件平台的调整和软件平台的调整),接下来是对ORACLE数据库性能参数的调整,然后是对数据库设计的调整,最后是对SQL的调整。

一、操作系统级的调整

Oracle和其他软件产品一样,是要运行在一定的环境下的。

这个环境包括:

网络环境

服务器硬件配置

操作系统

其他软件的影响

1、 网络环境

基本上所有的数据库应用不会是单纯的服务器段应用,为了保证客户端访问服务器的性能较好,需要有网络带宽的保障,以避免由于网络原因造成SQL查询变慢。

2、 服务器硬件配置

为服务器配置性能较好的CPU:cpu资源的不足令查询变慢。当查询超过了oracle服务器的cpu性能时,你的数据库性能就受到cpu的限制。要想使Oracle的运行效率提高,最好为服务器配置性能较好的CPU,最好是64位的CPU,以提高分析速度;通常在大型应用中会为服务器配置多个CPU,以增加并行处理能力。

为服务器分配足够的内存:Oracle的运行在启动时会从内存中分配一块SGA,而这部分内存的大小在一个专用Oracle系统中几乎占用服务器内存的一大半。系统上总的可用内存应该以所有系统成员均具有足够的的内存且功能处于最佳状态来配置。假定服务器配置了足够的内存,通常的经验内存配置为

系统成员 内存分配比例

OracleSGA 50%

操作系统 20%

其他应用程序 30%

一般情况,我们都会为系统分配一定的虚拟内存,用以Oracle数据交换、排序、HASH应用等,即用部分磁盘区域补充物理内存。为了避免I/O争用,不要将虚拟内存空间与其他Oracle数据库数据文件放在同一分区上。

合理设置磁盘I/O:

Oracle的运行是离不开磁盘读写的,Oracle的配置文件、数据文件、控制文件、日志文件都存储于磁盘上。大家都知道,I/O请求包括数据定位、等待、数据传输三个主要部分,其中又属数据定位花费的代价最高。合理的设置服务器磁盘I/O,可以避免I/O争用,提高Oracle的性能。

通常,我们采用将数据文件、日志文件分磁盘(分分区)存储,以避免I/O争用。

但是,现代技术的发展,磁盘RAID技术已经我们提供了很好的优化方案。选择合理的RAID方案,可以提高Oracle性能。

常用RAID方案:

RAID0:增强I/O,提高读写性能。但是,不具备可恢复性。

RAID1:提供镜像和全数据冗余,增强备份;但是,需要两倍的存储量。 RAID0+1:先进行磁盘并用,再实现镜像。提供了良好的读写性能和数据冗余;但是需要较大的存储代价。

RAID1+0:先实现镜像,再实现磁盘并用。与RAID0+1相同,但是更具可用性。

RAID5:既实现了磁盘并用,并用最少的代价实现了镜像。为目前最多采用的RAID方案。

但是,RAID5在写入数据时会造成性能损失;所以适用于读多写少的操作。

3、 操作系统

增加虚拟内存,提高排序、HASH操作性能。

合理进行磁盘碎片整理,提高可读效率。为了安全地整理磁盘碎片,需关闭打开数据文件的实例,并且停止服务。如果你有足够的连续磁盘空间建立数据文件,那么你就很容易避免数据文件产生碎片。

运行控制面板的“系统”,在高级选项卡中设置“性能选项”到“后台程序”,这提供优先权给后台应用程序。

删除不需要的网络协议,只保留TCP/IP协议。

最好禁止系统里非必须的服务,如果时而需要某些服务功能,可将启动类型设置为“手动”,要做到这一点首先同网络管理员验证实际的服务需求。

Oracle是内存消耗大户,不要在执行下列功能的系统上运行Oracle数据库:主域或备份域控制器(Windows 2000下都称域控制器)、文件服务器、打印服务器、远程访问服务器、路由器、代理或防火墙。

4、其他软件的影响

最好关闭占用系统资源较多的程序。

二、Oracle数据库性能参数的调整

在对Oracle数据库进行优化时,需要用到许多的参数,其中有一部分参数对系统性能影响较大,这部分参数叫可变参数。可变参数按其作用可以分为两大类,一大类是起限制作用的,如OPEN_CURSORS;另一大类是影响系统性能的,如DB_BLOCK_BUFFERS。

限制类可变参数:

(1) DML_LOCKS

该参数表明多少个用户,可同时能修改多少张表。例如:有三个用户同时修改二张表,则要求表上的总数为6。若置为0,则组织队列不起作用,其性能会稍有提高。使用该参数时不能用DROP TABLE、CREATE INDEX或显式封锁。

(2) LICENSE_MAX_SESSION

该参数指出允许并发用户会话的最大数。若此参数为0,则不能实施并发。若并发的用户会话数已达到此极限,则只有具有RESTRICTED SESSION权限的用户才能连接到服务器。

(3) LICENSE_MAX_USERS

该参数指出在一个数据库上可建立的最大用户数。当达到最大值时,便不能再建新用户,可改变此值以放松限制。在LICENSE_MAX_SESSION或LICENSE_MAX_USER为0时,则并发会话或任何用户都不能用。若对不同的实例,此参数不同时,则以第一个登录的数据库实例的参数为准。

(4) MAX_DUMP_FILE_SIZE

该参数指定操作系统中写跟踪文件的块的最大值。可用此值来限制跟踪文件的空间。

(5)OPEN_CURSORS

该参数指明一个用户进程能同时打开光标的最大数,它能限制每个用户进程占用的内存空间量。

(5) OPEN_LINKS

该参数指定并发连接到远程数据库的最大用户进程数。若同时引用多个数据库,则应该增大该值。例如:同时交替访问A、B和C三个数据库时,若OPEN_LINKS设置为2,则需花费等待连接时间。此参数只用于分布事务。若该参数设置为0,则不允许进行分布事务处理。

(6) PROCESS

该参数指定同时连接到Oracle服务器上的最大用户进程数。该参数值包括6个后台进程和一个登录,因此,该参数值为20,则只能有13或14个并发用户连接到服务器。

影响系统性能类可变参数:

(1) CHECKPOINT_PROCESS

该参数根据是否要求检查点而设置成TRUE或者FALSE。当所有缓冲区的信息写到磁盘时,检查点进程(CHPT)建立一个静态的点。在归档日志文件中做一个记号表示有一个检查点发生。检查点发生在归档日志转换的时候或当达到log_checkpoint_interval定义的块数的时候。当设置此参数为TRUE时,后台进程CHPT便可工作。在检查点期间内,若日志写进程(LGWR)的性能减低,则可用CHPT进程加以改善。

(2) DB_BLOCK_CHECKPOINT_BATCH

该参数的值设置得较大时,可加速检查点的完成。当指定的值比参数DB_BLOCK_CHECKPOINT_BATCH大时,其效果和指定最大值相同。

(3) DB_BLOCK_BUFFERS

该参数是在SGA中可作缓冲用的数据库块数。该参数决定SGA的大小,对数据库性能具有决定性因素。若取较大的值,则可减少I/O次数,但要求内存空间较大。每个缓冲区的大小由参数DB_BLOCK_SIZE决定。

(4) DB_BLOCK_SIZE

该参数表示Oracle数据库块的大小,以字节为单位,典型值为2048或4096。该值一旦设定则不能改变。它影响表及索引的FREELISTS参数的最大值。

(5) DB_FILES

该参数为数据库运行时可打开的数据文件最大数目。

(6) DB_FILE_MULTIBLOCK_READ_COUNT

该参数表示在顺序扫描时一次I/O操作可读的最大块数,该最大块数取决于操作系统,其值在4至16或者32是比较好。

(7) D1SCRETE_TRANSACTION_ENABLED

该参数实现一个更简单、更快的回滚机制,以改进某些事务类型的性能。 当设置为TRUE时,可改善某些类型的事务性能。

(8) LOG_ARCHIVE_BUFFER_SIZ 此参数的值依赖于操作系统,它与LOG_ARCHIVE_BUFFER 参数一起用于调整有归档日志的运行,使其运行速度尽量加快,但不能快到降低性能。仅当直接归档到磁带设备时才需要增加这些参数的值,重做日志缓冲区要等待归档日志缓冲区变得可用。

(9) LOG_ARCHIVE_BUFFER

该参数指定用于归档的日志时的缓冲区数。

(10) LOG_BUFFER

该参数指明分配给SGA中的日志缓冲区的字节数,该参数值较大时,可减少日志I/O的次数。对于繁忙的系统不宜采用大于或等于64K的值。缺省值-般为数据库块的4倍。

(11) LOG_CHECKPOINT_TIMEOUT

该参数指明两个检查点之间的时间间隔,若指定为0时,则说明不允许进行基于时间的检查点。

(12) LOG_CHECKPOINT_INTERVAL

该参数用来确定检查点进程的执行频率。这个数值设置成取检查点之前处理的重做缓冲区块的数量。

(13) LOG_FILES

该参数指定运行期间数据库可打开的日志文件数。若需要较大的SGA空间,而不需多个日志文件,则可减少该值。

(14) LOG_SIMULTANEOUS_COPIES

该参数是日志缓冲区副本闩锁的最大数,为同时写日志项所用。为提高性能,可设置此参数为两倍的CPU数,对单进程系统,该值多数设置为0,此时断开闩锁。

(15) LOG_SMALL_ENTRY_MAX_SIZE

该参数与LOG_SIMULTANEOUS_COPIES参数配合使用。若日志项大于此项,则在给缓冲区分配空间并获得日志复制闩锁之后,用户进程释放日志复制闩锁。

(16) OPTIMIZRER_MODE

若该参数的值为RULE,则ORACLE优化器选择基于规则的优化;若设置为COST,并且在数据字典中存在有统计信息,则优化器选择基于代价的优化方法进行优化。

(17) SEQUENCE_CACHE_ENTRIES

该参数指明在SGA中可进行高速缓存的序列数,用于直接存取。该高速缓存区是基于最近最少使用(LRU)的算法进行管理的。若此值设置得较高,则可达到较高的并发性。

(18) SEQUENCE_CACHE_HASH_BUCKETS

该参数用于加速查看高速缓冲区最近请求的最新序列的桶式地址数,每个桶式地址占8个字节。高速缓冲区以散列表排列,该参数应为质数。

(19) SERIALIZEABLE

此参数用于保证重复读的一致性。当它设置为TRUE时,查询可保证表级读一致,以防止在此查询提交之前的修改。

(20) SHARED_POOL_SIZE

该参数指定共享池的大小,其中包括共享光标及存储过程。在多用户系统中,较大的SHARED_POOL_SIZE值可改善SQL语句的执行性能,但较小的值可节省内存。

(21) SMALL_TABLE_THRESHOLD

该参数决定SGA中用于扫描的缓冲区的数目,若表的数目小于该值,则该表可整个地读入高速缓存区。若表大于该值,则立即重用该缓冲区。一般用缺省值可使性能最好。