Chinaunix首页 | 论坛 | 博客
  • 博客访问: 197756
  • 博文数量: 21
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-05 21:34
文章分类

全部博文(21)

文章存档

2008年(1)

2006年(20)

我的朋友

分类: Oracle

2006-04-25 00:27:43

根据自己项目在使用Oracle中的经验,及Oracle参考手册,对于oracle的调优方法一点点的总结.

以后的篇幅会讨论表空间和数据文件的建立对Oracle并发的影响.本文只是讨论SGA和PGA和Spfile中参数的设置.

 

 

oracle 的内存可以按照共享和私有的角度分为系统全局区和进程全局区,也就是SGA(system global area)系统全局区和PGA(process/program global area)程序全局区。对于SGA区域内的内存来说,是共享的全局的,在UNIX 上,必须为oracle 设置共享内存段(可以是一个或者多个),因为oracle 在UNIX上是多进程;而在WINDOWS上oracle是单进程(多个线程),所以不用设置共享内存段。PGA是属于进程(线程)私有的区域。在oracle 使用共享服务器模式下(MTS),PGA中的一部分,也就是UGA会被放入共享内存large_pool_size 中。最好实例在创建时采用专用数据库,而不采用共享数据库,因为给固定的内存Oracle用,也就是说锁存.

 

查看sga,可以通过oracle的OEM工具(我一般采用这个),或在sqlplus中要以dba 的用户:

select * from v$sga;

中的

Database Buffers 就是指SGA size

 

SGA的大小

在任何一个生产系统正式投入使用之前,我们不拥有任何系统运行信息让我们去调整,这样就只有两种可能,一是根据文档推荐设置,另外一种就是根据经验设置。相对来说,根据经验的设置比根据文档的设置要可靠一些。

 

在设置参数之前呢,我们首先要问自己几个问题

一:物理内存多大

二:操作系统估计需要使用多少内存

三:有多少并发连接

四:应用是OLTP(TP查询) 类型还是OLAP(数据仓库) 类型

根据这几个问题的答案,我们可以粗略地为系统估计一下内存设置。

 

有一个公式是必须是死的: SGA+PGA+系统使用内存+其它应用程序内存<=物理内存

 

一般作法,SGA是剩余可能内存的0.7倍,要SGA中的高速缓存是SGA中的0.7以上,共享池是一个SQL的解析池,一般不需要太大,再复杂的SQL也不会很大的.3G的SGA的话,500MB以下.其它那些都是20MB以下就行了.实际上如果就算SGA 设置的比较大也不会导致错误,而是可能出现频繁的内存页的换入与换出(page in/out)。在操作系统一级如果观察到这个现象,那么我们就需要调整内存的设置(原来我也遇到这种情况)。

 

 

 

 

PGA的查看:

show parameters sga_max_size

这个是程序全局区,是每个进程所占的最大内存,在专用数据库才有用.

 

对于OLTP系统

PGA_AGGREGATE_TARGET  = ( * 80%) * 20%  

对于(OLAP)DSS系统

PGA_AGGREGATE_TARGET  = ( * 80%) * 50%

 

总之合理调好PGA和SGA是调优的关键.

 

 

Spfile的参数:

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

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

(5)OPEN_LINKS

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

(6)PROCESS

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

(7)ROW_LOCKING

该参数指定行封锁方式。若设置为“ALWAYS”,则在修改表时只实施行封锁。若设置为“INTENT”时,则行封锁只适用于SELECT FOR UPDATE,而在修改时实施表封锁。

 

 

影响系统性能类可变参数

(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_SIZE

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

 

 

Spfile的其它各参数的意义,在这里就不再具体讲述,可以通过OEM软件下面每个参数的说明.以上的参数说明,我也是参照它的说明改进.

 

 

2006-04-25 00:47 于北京通州

 

 

阅读(2390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~