调整归档时第一件需要确保的事是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将会刮起这个归档。这应该通过保持空闲实例启动或者禁用其重做线程完全避免。
归档在前项滚动期间将被完全禁用。因此应该确保干净的关闭,保持重做产生最小化。