ICD系统Oracle数据库配置指导书-20031230-B1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

INtess-客户服务平台
Oracle数据库参数设置指导书
拟制:李强日期:2003-12-29 审核:日期:
审核:日期:
INTESS ICD系统Oracle数据库配置指导书
1. 配置INIT(SID).ORA参数
init(sid).ora文件是oracle数据库非常重要的参数配置文件,oracle数据库根据初始化参数文件init.ora中设置的参数来配置自身的启动,每个实例在启动之前,首先读取这些参数文件中设置的不同参数。

这些参数决定了oracle数据库的内存配置及其内部很多的处理规则,它对系统的稳定运行及性能优劣会产生重要影响。

考虑到INTESS ICD系统目前使用的数据库版本大部分都是oracle8i,因此本文主要对oracle8i的数据库参数设定做出规范。

同时因为有部分局点已经开始使用oracle 9i,本文的最后部分也对9i中一些重要参数的变化做了说明。

1.1 检查oracle版本和参数值
oracle8i是指从oracle 8.1.5.X到oracle 8.1.7.X的各版本。

可以用SYS用户在SQLPLUS中发出以下命令查询oracle的版本信息:
SQL>select * from v$version;
返回如下结果:
BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.7.0.0 - 64bit Production
PL/SQL Release 8.1.7.0.0 - Production
CORE 8.1.7.0.0 Production
TNS for Solaris: Version 8.1.7.0.0 - Production
NLSRTL Version 3.4.1.0.0 – Production
以上结果说明该数据库版本为64位的oracle 8.1.7。

如果返回结果中没有64bit Production 的信息,则为32位版本的数据库。

特别要注意,32位版oracle数据库的SGA区最大不超过1.7G,如果在初始化参数文件里配置的SGA超过了1.7G,oracle无法利用,且可能会导致不可测的问题。

对oracle 8i而言,8.1.7.4是一个比较成熟稳定的版本,因此建议只要有可能,应该将数据库升级为8174;
用以下方法可以查询出当前oracle的初始化参数值:
以SYS用户登陆oracle,进入SQLPLUS.然后用命令show parameter。

如想查看以db开头的参数值,则发出如下命令:
SQL>show parameter db
也可以查询动态视图v$parameter来获得当前的参数值:
SQL>set linesize 300
SQL>col value format a40
SQL>select name,value from v$parameter;
注:在配置文件中的oracle参数对大小写不敏感。

1.2 快速配置指导
1.2.1 Oracle 8i参数配置快速参照表
(下表中未列出的参数不建议出现在init(sid).ora文件中)。

备注1:
以下说明如何在操作系统一级配置lock_sga
1、AIX 5L(AIX 4.3.3 以上,AIX 4.3.2及以下版本不支持lock SGA在内存中)
以root登陆
#cd /usr/samples/kernel
#./vmtune -S 1(此命令将v_pinshm参数设为1)
然后oracle用户修改initSID.ora 中lock_sga = true
重新启动数据库
2、HP UNIX
以root身份登陆
建立文件privgroup.
#vi /etc/privgroup
增加一行:"dba MLOCK"后存盘退出
# /etc/setprivgrp -f /etc/privgroup
以oracle用户修改initSID.ora中lock_sga=true
重新启动数据库
3、SOLARIS (solaris2.6以上)
sun从solaris2.6以后引入了ISM技术,它可以使SGA区锁在内存中。

8i以后oracle使用隐藏参数_use_ism=true来实现该功能。

这个隐藏参数不需要修改。

1.3 oracle 8i参数说明
DB_BLOCK_BUFFERS
这个参数决定了数据库缓冲区的大小,这部分内存的作用主要是在内存中缓存从数据库中读取的数据块,数据库缓冲区越大,为用户已经在内存里的共享数据提供的内存就越大,这样可以减少所需要的磁盘物理读。

在9i以前数据库缓冲是由db_block_buffers*db_block_size 来决定大小的。

db_block_size参数是在创建数据库时设置的,它决定数据库里每个块的大小,9i以前不能改变已经存在的数据库的块大小,因此应该在最初创建数据库时就确保设置适当的数据库块大小。

对ICD数据库,建议db_block_size在创建数据库时设置为
8k,db_block_buffers*db_block_size的乘积占物理内存的20%-30%,物理内存在1G以内,可以占20%,1G-2G之间可占25%,物理内存在2G以上,可以占30%,甚至更高。

说明:
oracle 8i以后的数据缓冲区(data buffer)实际可由三部分组成,分别是默认池、保留
池(buffer keep)和回收池(buffer recycle)。

保留池可用于存放需要极快的访问的小表,回收池可用于存放需要全表扫描的大表。

保留池和回收池的大小分别由参数buffer_pool_keep和buffer_pool_recycle决定。

这两个参数通常在做性能调整时才设置,因此不建议设置这两个参数。

shared_pool_size
Shared pool由三部分组成,分别是Dictionary cache(包括数据字典的定义,如表结构、权限等),Library cache(包括共享的sql游标,sql原代码以及执行计划、存储过程和会话信息)和Control structure。

它的大小由初始化参数shared_pool_size控制,它的作用是缓存已经被解析过的SQL,使其能被重用,不用再解析。

SQL的解析非常消耗CPU的资源,如果一条SQL在Shared pool中已经存在,则进行的仅是软解析(在Shared pool中寻找相同SQL),这将大大提高数据库的运行效率。

当然,这部分内存也并非越大越好,太大的Shared pool,oracle为了维护共享结构,将付出更大的管理开销。

根据ICD系统的特点,这个参数的设置建议在150M-500M之间。

如果系统内存为1G,该值可设为150M-200M;如果为2G,该值设为250M-300M;每增加1G内存,该值增加100M;但该值最大不应超过500M。

(Shared pool不足,oracle将报4031错)。

shared_pool_reserved_size
它的作用是在shared pool中保留一块区域以放置一些大对象(如大型软件包),如不设置此参数,系统缺省保留5%的shared pool空间用于放置大对象。

根据ICD系统的实际情况,不建议设置该参数,让系统自动分配即可。

Sort_area_size
该参数是当查询需要排序的时候,oracle将使用这部分内存做排序,当内存不足时,使用临时表空间做排序。

这个参数是针对会话(session)设置的,不是针对整个数据库。

即如果应用有170个数据库连接(session),假设这些session都做排序操作,则oracle会分配8*170等于1360M内存做排序,而这些内存是在oracle的SGA区之外分配的,即如果SGA区分配了1.6G 内存,oracle还需要额外的1.3G内存做排序。

建议该值设置不超过3M,当物理内存为1G时,该值宜设为1M或更低(如512K);2G时可设为2M;但不论物理内存多大,该值也不应超过3M;
sort_area_retained_size
这个参数的含义是当排序完成后至少为session继续保留的排序内存的最小值,该值最大可设为等于Sort_area_size。

这样设置的好处是可以提高系统性能,因为下次再做排序操作时不需要再临时申请内存,缺点是如果Sort_ara_size设的过大并且session数很多时,将导致系统内存不足。

建议该值设为Sort_area_size的10%-20%左右,或者不设置(缺省为0)。

Log_buffer
Log_buffer是重做日志缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR 进程将它写入磁盘.LGWR的写入条件是:用户提交、有1/3 重做日志缓冲区未被写入磁盘、有大于1M 重做日志缓冲区未被写入磁盘、超时、DBWR需要写入的数据的SCN 号大于LGWR 记录的SCN 号,DBWR 触发LGWR写入。

从中可以看出,大于1M的log buffer值意义并不大。

建议不论物理内存多大,该值统一设为512K。

Large_pool_size
Oracle的large_pool用于MTS、并行查询和RMAN。

如果使用了MTS或RMAN,large_pool特别有用,它可以降低用户对shared_pool的争用。

我们的ICD系统禁止使用MTS,暂时也不使用RMAN,因此这个参数不推荐设置。

(或设为1M)
Java_pool_size
Oracle8I以后,oracle数据库内置了对java的支持,我们的ICD系统并未使用这些功能,因此java_pool_size的值可以减少到1M。

但如果数据库安装时选择了JServer组件,则这个值可以设置为20M-30M之间。

(可以查询v$option动态视图,如果java那一项值为true,则表示安装了JServer,为false,表示未安装)。

SESSION_CACHED_CURSOR
该参数指定要高速缓存的会话游标的数量。

对同一 SQL 语句进行多次语法分析后, 它的会话游标将被移到该会话的游标高速缓存中。

这样可以缩短语法分析的时间, 因为游标被高速缓存, 无需被重新打开。

设置该参数有助于提高系统的运行效率,建议无论在任何平台都应被设为50。

pre_page_sga
该参数表示将把所有 SGA 装载到内存中, 以便使该实例迅速达到最佳性能状态。

这将增加例程启动和用户登录的时间, 但在内存充足的系统上能减少缺页故障的出现。

建议在2G以上(含2G)内存的系统都将该值设为true;
DML_LOCKS
所有用户获取的表锁的最大数量。

对每个表执行 DML 操作均需要一个 DML 锁。

例如, 如果3 个用户修改 2 个表, 就要求该值为 6。

该值过小可能会引起死锁问题。

这个参数同transaction参数有关系,缺省为4倍的transaction大小。

建议该参数不应该低于600,可以检查系统的当前值,若比600小,则将transaction参数改为150以上,dml_locks参数会自动变为transaction的4倍。

JOB_QUEUE_PROCESS
该参数指定每个例程的SNP作业队列进程的数量(SNP0, ... SNP9, SNPA, ... SNPZ)。

当使用job或复制时,一定要设置该参数。

根据ICD系统的要求,该参数必须设置为大于0的值,推荐设为3或4。

说明:
调整完上述参数后,一定要计算SGA的尺寸,总原则是SGA的尺寸应小于物理内存的一半。

SGA的计算方法如下:SGA=DB_BLOCK_BUFFERS*DB_BLOCK_SIZE+SHARED_POOL_SIZE+LOG_BUFFER。

同时还要保证(SGA+sort_area_size*sesson数量)不大于物理内存的70%。

DB_FILE_MULTIBLOCK_READ_COUNT
该参数主要同全表扫描有关。

当oracle在请求大量连续数据块的时候,该参数控制块的读入速率。

DB_FILE_MULTIBLOCK_READ_COUNT参数能对系统性能产生较大的影响,它和DB_BLOCK_SIZE参数之间有重要关系。

因为在UNIX物理层上,oracle总是以最小64K的数据库块进行读入,因此应该使这2个参数的乘积为64K。

即如果DB_BLOCK_SIZE为8192,则DB_FILE_MULTIBLOCK_READ_COUNT应设为8。

DB_BLOCK_LRU_LATCHES
在多CPU机器上通过初始化参数DB_BLOCK_LRU_LATCHES允许多个LRU锁存器。

当DBWR和服务器进程扫描数据块缓冲Cache时,它们需要获取LRU锁存器。

这种锁存器对于避免缓冲区变脏以及避免被其他进程改变都是必要的,这也避免了扫描时返回不一致的结果。

如果没有使用锁存器,某个扫描自由缓冲区的进程可能会发现一个自由缓冲区,但是立刻就可能被其他进程使用。

每一个LRU 锁存器至少保护50个数据块缓冲区。

所有缓冲区都被Oracle基于Hash算法分配到特定的LRU 锁存器之上。

如果该值太小,在数据库活动量很大时就会潜在地导致竞争。

在多CPU机器之上这种竞争会高一些,这是因为多个服务器进程可能排队以获取一个LRU Cache。

该参数默认值为CPU个数的一半,在多CPU系统中,推荐设为等于CPU数目或CPU数目的2倍-3倍(在9i中,该参数已经变为一个隐含参数)。

OPEN_CURSORS
指定一个会话一次可以打开的游标(环境区域) 的最大数量, 并且限制PL/SQL 使用的PL/SQL 游标高速缓存的大小, 以避免用户再次执行语句时重新进行语法分析。

请将该值设置得足够高, 这样才能防止应用程序耗尽打开的游标。

此值建议设置为250-300。

LOG_CHECKPOINT_INTERV AL
该参数同检查点有关,检查点由ckpt 进程执行,检查点发生时oracle会同步数据文件、控制文件和redo文件。

该参数指定当写入重做日志文件中的OS 块(而不是数据库块) 的数量达到设定值时,强制执行一次检查点。

该值较低可以缩短例程恢复所需的时间, 但可能导致磁盘操作过量。

在8i中该值缺省为100000。

当值为0时,表示此参数不起作用。

该参数的设定需要考虑的因素较多,建议使用缺省值。

LOG_CHECKPOINT_TIMEOUT
该参数仍然同检查点有关。

它指定距下一个检查点出现的最大时间间隔(秒数)。

将该时间值指定为0, 将禁用以时间为基础的检查点。

较低的值可以缩短例程恢复的时间, 但可能导致磁盘操作过量。

在8i中该值缺省为1800。

如果想强制某一时间段后执行检查点,则用此选项。

不建议修改该值。

1.4 不建议设置的参数
所有以MTS开头的参数
MTS是Multi-Threaded Server(多线索服务器)的简称。

如果不采用MTS,oracle会为每一个连接请求分配一个专有进程,这时叫专有连接(dedicate)模式。

当连接数非常多时,这些专有连接进程会消耗大量的系统资源。

为减少这种情况下的负载,oracle实现用MTS让新连接附在预先产生的影子进程(shadow process)上,等于多个新连接共享一个连接进程。

如果服务器的平均连接数超过400,则MTS可能会给很多在线任务提供更快的性能。

但根据经
验,使用MTS会给系统的稳定性带来很多负面影响,且ICD系统使用了中间件,通常不会产生太多的连接数,因此无论在任何情况下,建议都不要使用MTS。

不使用MTS的方法就是将初始化参数文件里以MTS开头的参数全部注释掉。

如果初始化参数文件中不包括MTS参数,则不要增加相关参数。

PARALELL_MAX_SREVERS,PARALELL_MIN_PERCENT,PARALELL_MIN_SERVERS,
PARALLEL_ADAPTIVE_MULTI_USER,PARALLEL_AUTOMATIC_TUNNING
以上几个参数是oracle并行查询(PQ)参数,parallel_min_servers的含义是设置数据库实例查询服务器的最小数量,parallel_max_servers是设置允许使用的查询服务器的最大数量,parallel_min_percent是指定并行查询所需并行度值的最小百分比。

PARALLEL_ADAPTIVE_MULTI_USER和PARALLEL_AUTOMATIC_TUNNING 参数是oracle 8i特有的参数。

将这两个参数设为true后,oracle将自动确定所有其它相关的参数,并启用相应的算法来改善多用户环境下并行执行的性能。

Oracle的并行查询仅当在多CPU处于空闲状态且数据分布在不同磁盘时才会对某些查询(有全表扫描操作)的性能产生有益的影响,而且即使在这种情况下,并行查询服务器的最大数量最好也不要超过CPU的数量。

1.5 Oracle8i OPS的特殊参数设置
OPS是指Oracle并行服务器(Oracle Parallel Server),它允许多个实例在同一时刻访问单一的数据库。

OPS增强了数据库的可用性,单个节点的故障并不会使整个数据库不可用。

而且如果应用分割合理,OPS也可以提高系统的处理性能。

但由于OPS本身的复杂性,如果对并行操作的使用不当,经常会出现系统操作性能比单节点还慢的结果。

在OPS中,oracle通过集成分布式锁管理器(Integrated Distributed Lock Manager,IDLM)来协调资源的使用,防止发生冲突。

一旦某个节点上的实例启动后,它就可以获取各种各样的DLM锁,这些锁主要划分为PCM(Parallel Cache Management,并行Cache 管理)锁和非PCM锁。

并行C a c h e管理是一种技术,这种技术允许多个实例同时访问共享资源。

它允许一个节点访问位于另一个节点的缓冲区C a c h e中的数据。

PCM锁用于锁住数据库块,非PCM锁用于锁住所有其他的共享DLM资源(例如共享池中的数据文件和对象)。

对PCM锁的控制是通过GC*参数指定的。

这些参数包括GC_FILES_TO_LOCKS, GC_DEFER_TIME,GC_RELEASABLE_LOCKS、GC_ROLLBACK_LOCKS等。

OPS的某些特殊参数对系统性能有很大的影响,而且这些参数的设置同具体应用有关,比较复杂,因此一定要谨慎设置。

rollback_segments
OPS数据库每个instance的回滚段在建立时必须被建成私有(private),这是为防止发生不必要的资源冲突。

应该为每个instance指定不同的回滚段,建议为每个instance至少建立30个回滚段。

Lm_ress和lm_locks
这两个参数配置了在实例启动时系统可利用的资源和锁的数量,它们对OPS数据库的性能有较大影响。

在2G内存的系统中,lm_ress建议设为60000,lm_locks建议设为72000。

每增加1G 内存,这两个值建议分别增加20000。

在oracle 817以前,该参数的设置方式为直接设置,格式为lm_ress=60000,lm_locks=72000。

在oracle 817以后,这2个参数必须按以下格式设
置,分别指定最小值和最大值,lm_ress =(60000,100000),lm_locks =(72000,130000)。

GC_FILES_TO_LOCKS
这个参数控制PCM锁的分配。

该参数很复杂,它的配置格式如下:
gc_files_to_locks = "{file_list=lock_count[!blocks][each][:]}..."
其中file_list表示数据文件列表,lock_count表示PCM锁的数量,!block表示每个锁控制多少个数据块(该值为可选项),each表示是否对文件列表中的每个文件都分配相同数量的锁。

如gc_files_to_locks="1=2000:2-25=1000EACH:26=512"
表示数据文件1分配2000个PCM锁,数据文件2-25每个文件分配1000个PCM锁,数据文件26分配512个PCM锁。

对该参数的设置需要对应用系统有深入的了解,一般在OPS数据库发生性能问题时才会调整该值,因此不建议设置该参数,由系统自动分配。

_lm_direct_sends
在HP平台下必须设为lkmgr,在IBM和SUN的平台下不建议设置。

这是oracle的一个隐含参数,一般来说,我们不建议修改oracle的隐含参数,因为这可能导致不可测的后果且得不到oracle公司的技术支持。

但有时为了规避oracle数据库本身的BUG或其它特殊原因,也需要修改某些隐含参数。

_lm_direct_sends参数在HP平台下的oracle 8i OPS数据库中必须被强制设为lkmgr。

因为oracle 8i OPS数据库有一个BUG(1189628),当有2个或以上的进程试图同时连接DLM(分布式锁管理器)时可能会导致数据库挂起(hang)。

故障发生时,客户端无法新建数据库连接,已连接的客户端及应用程序无响应,表现同死机类似,但过几分钟到几十分钟后,系统自动恢复。

1.6 oracle 9i中主要参数的变化
目前在客服系统中有个别局点因为特殊原因已经使用了oracle 9i,今后9i的使用肯定会越来越多。

9i中一些重要的参数同8i有较大的不同,为保证系统的稳定运行,本文也对oracle 9i中的一些重要参数的变化做出说明,并给出相应的建议。

(下文中的9i R2指oracle 9.2.X.X)
undo_management
9i中新引入了undo tablespace,它可以自动管理oracle的回滚,不再需要手工建立回滚段,但9i也支持继续使用手工建立的回滚段。

由Undo_management参数决定是使用undo tablespace还是使用手工建立的回滚段。

如果该参数为auto,则表示使用undo tablespace。

为manual,表示使用手工管理回滚段,这时同 8i一样,也需要建立回滚表空间,且要建立回滚段。

在9i R2中,该参数缺省值为auto。

建议继续使用该缺省值,即使用undo tablespace,不用手工建立回滚段。

undo_retention
该参数的单位为秒,当undo_management参数为auto时,undo_retention表示在undo_tablespace中保留多长时间的回滚信息,9i的flash_back功能同该值有关。

该值设为多大同undo_tablespace 的大小有关,在9i R2中缺省值为10800,一般情况下已经够了,不建议修改该参数。

sga_max_size
9i中该值决定了SGA区的最大值。

只要SGA区不大于该值,9i中可以动态调整数据库缓冲区和share pool的大小。

建议该值取物理内存的50%。

db_cache_size
在9i中,数据库缓冲区的大小由db_cache_size决定,8i中的db_block_buffers被取消。

db_cache_size的单位是字节,它直接决定了数据库缓冲区的大小,而不再是块的数量。

对该值的建议值可以参照8i中对数据库缓冲区的大小建议来设置。

db_nk_cache_size
这是9i中引入的新参数。

9i允许以不同的数据库块大小(db_block_size)建立表空间。

比如标准db_block_size(即建立数据库时定义的大小)为8k,9i还允许以4k、16k、32k等不同的db_block_size值建立表空间。

与此相对应,需要建立不同块尺寸的数据库缓冲区,这就需要定义db_nk_cache_size,如db_4k_cache_size等。

考虑到我们系统的实际情况,不建议配置该参数。

workarea_size_policy
这也是9i新引入的参数,如果该参数设为auto,oracle会为所有的session在sga区之外分配一块大的内存区域做为UGA,该内存由pga_aggregate_target设置。

每个session都在这块大内存区中做排序等操作,从而不用再设置其他的”*_area_size”参数。

该值在9i中缺省设为auto,建议继续使用缺省值。

pga_aggregate_target
指定连接到例程的所有服务器进程的目标 PGA 总内存。

建议对该值设置为每1G内存增加100M,但最大不要超过500M。

设置了workarea_size_policy和pga_aggregate_target参数后,不用再设置sort_area_size等参数。

相关文档
最新文档