归档可用的缓冲大小和数量调整

来源:pcdog 作者:佚名 2008-04-16 出处:pcdog.com

oracle  
下一页 1 2 3 
    调整归档时第一件需要确保的事是LGWR没有等待ARCn完成归档一个日志文件。第二个需要考虑的是ARCn活动时的影响对前台进程最小化。而这两个方面通常是刚好相对的,因此最好的目标就是调整ARCn使其足够快,并在可以证明其影响了前台进程时降低其速度。
主要包括以下原则,另外还包括归档可用的缓冲大小和数量的调整,以及归档进程的数量。

缓冲的大小

ARCn每次从日志文件读取 _log_archive_buffer_size(以块为单位),并写入归档目的地。因此如果_log_archive_buffer_size设置为OS下最大的可能值,那么ARCn的性能将最大化并且其在I/O子系统上的负载将最小化。如果该参数在OS上为UNLIMITED,那么设置为最大的物理I/O大小的几倍,效果将最好。

缓冲的数量

如果_log_archive_buffers可用并且可以从日志文件异步读取,那么ARCn将使用aio_read()系统调用并行读取日志到多个缓冲。如果多个日志成员可用,将使用并行异步读每个日志文件成员以扩展磁盘I/O负载。如果使用了软件/硬件镜像进行日志文件传播,类似的负载平衡将会自动由软件/硬件使用。因此,可以考虑使用并行归档读,使用与每个日志文件相同多的磁盘,镜像或者传播,然后配置_log_archive_buffers最多为3。

需要注意的是:不能通过设置多个_arch_io_slaves来模麓尤罩疚募稍辈⑿幸觳蕉痢RCn通常自己执行该任何并仅使用I/O服务器来写操作。

为了在可能时进行异步归档写,至少需要设置两个_log_archive_buffers,以并行从日志文件读取。但是如果系统达到了cpu负载颈瓶并且归档期间前台进程受到了影响,并且没有归档聚集的威胁,应该考虑减少缓冲数量,分散cpu负载。

进程数量

如果产生的重做持续过高或者需要归档到多个位置,通常需要多个ARCn进程,从Oracle8i开始,可以通过设置log_archive_max_processes参数。也可以通过定期调度ALTER SYSTEM ARCHIVE LOG ALL,如果没有归档聚集,该命令的影响是很小的,但是如果有,该命令会迅速产生额外的arcn帮助赶上聚集。

为了防止LGWR赶上归档聚集运行多个ARCn是最大的保险,但是为了使该策略有效,恰当的配置在线日志和归档终点的磁盘是很重要的。

因为也可以使用手工归档,Oracle在归档期间将在任何在线日志文件上保留一个排斥的WL(等待日志)队列锁,而忽略log_archive_max_processes的设置。这些队列上的操作由archive control latch保护。归档活动可以从STATSPACK等报告中的该LARCHE上的gets列得到。

影响归档进程性能的两个威胁

在RAC环境下,在实例没有启动时,其线程是可用的。如果一个关闭的,启用的线程的当前SCN落后于force scn,那么在那个线程上将发生强制的日志切换并且活动实例的ARCn为未活动的实例归档日志文件。这使得arcn进程转移到那个实例中工作而不是执行其自己的工作。然而如果ARCn被其自己的lgwr唤醒归档其自己实例的日志,那么ARCn将会刮起这个归档。这应该通过保持空闲实例启动或者禁用其重做线程完全避免。

归档在前项滚动期间将被完全禁用。因此应该确保干净的关闭,保持重做产生最小化。

通用的索引块头

header address 153168988=0x9212c5c

kdxcolev 0

KDXCOLEV Flags = - - -

kdxcolok 1

kdxcoopc 0x89: opcode=9: iot flags=--- is converted=Y

kdxconco 2

kdxcosdc 2

kdxconro 254

kdxcofbo 544=0x220

kdxcofeo 4482=0x1182

kdxcoavs 3938

kdxcolev:索引级别(0代表页块);

kdxcolok:标示结构块事块是否发生;

kdxcoopc:内部操作码;

kdxconco:索引列数量,包括ROWID;

kdxcosdc:块中索引结构改变的数量;

kdxconro:索引条目的数量,不包括kdxbrlmc指针;

kdxcofbo:块中空闲空间的开始位置;

kdxcofeo:块中空闲空间的结束位置;

kdxcoavs:块中的可用空间数量(kdxcofbo-kdxcofeo);

分支头区域

kdxbrlmc 8388627=0x800013

kdxbrsno 92

kdxbrbksz 8060

kdxbrlmc:如果索引值小于第一个值(row#0),则为该索引值所在的块地址;

kdxbrsno:最后更改的索引条目;

kdxbrbksz:可使用的块空间;

叶块头区域

kdxlespl 0

kdxlende 127

kdxlenxt 4342843=0x42443b

kdxleprv 4342845=0x42443d

kdxledsz 0

kdxlebksz 8036

kdxlespl:块拆分时被清除的未提交数据的字节数;

kdxlende:被删除的条目数;

kdxlenxt:下一个页块的RBA;

kdxleprv:上一个页块的RBA;

kdxlebksz:可使用的块空间(默认小于分支的可用空间);



下一页 1 2 3 
上一篇:讲解Oracle数据库B-tree索引
下一篇:如何将Oralce数据库中孤独临时段清除