RMAN 系列(九) ---- 调整RMAN备份与恢复操作的性能(一)

2014-11-24 18:25:54 · 作者: · 浏览: 2

RMAN 实际上即装即用的,我们通常不需要对其做什么调整。 但是,RMAN 体系结构中还包含许多组件,当这些组件构成一个整体时,就必须调整RMAN的设置以从备份进程中得到最佳的性能。 通常RMAN 调整设计到处理逻辑和物理数据库设计中的低效率,调整介质管理库(Media Management Library: MML, 调整RMAN MML 层以备份数据库的物理设备更好地共存。






一. 调整RMAN 前的工作


如果RMAN 的备份操作时间非常长,这可能不是RMAN的故障。 在大多数情况下,这可能是数据库或MML存在问题。 关于MML 请参考blog


RMAN 系列(三) ---- 介质管理问题



调整RMAN和备份与恢复进程时,也可能会出现备份时间长的问题。尽管RMAN经常出现问题,但是这并不一定是RMAN故障。可能是系统总的带宽不够,而RMAN 只是造成这种局面的一个因素而已。 数据库的性能越好,RMAN 备份操作的性能就越好。




1.1 可以达到的RMAN 性能


RMAN 的白皮书上提到,在当前有效的技术条件下,在磁带备份和恢复数据的速率能够达到每小时1TB。 随着磁带备份技术的不断发展,这个速率还可能变的更大。




1.2 使用合适的硬件


如果想得到更高的备份性能,首先考虑的是所配置的备份硬件。 备份硬件可能包括磁带设备以及关联的基础结构(如电缆, 自动磁带接口 和 可能选用的MML层软件)。


RMAN能够受益于并行的CPU 资源,但是仅限于此而已,再增加更多的CPU 并不会继续使性能显著提高。 这与使用更多的备份设备是完全不同的。 在大多数情况下,使用多个备份设备比添加CPU更能够对备份和还原窗口产生积极的影响。


大多数备份设备是异步而不是同步的。 异步设备使得备份服务器进程无需等待I/O 的完成就可以发出I/O指令。例如:一个异步操作允许服务器进程发出磁盘写指令,在执行这个指令的同时,该进程可以继续填充内存缓冲区以准备下一个写操作。 另一方面,同步设备在执行其他任何工作之前都必须等待备份操作的完成。 因此,使用异步比同步设备更有效率。



下面说几个有关异步操作的参数:


BACKUP_TAPE_IO_SLAVES参数(默认为False)是设置磁带I/O异步的。如果支持磁带备份设备的异步I/O,我们建议将这个参数设置为TRUE,以启动该设置。 建立BACKUP_TAPE_IO_SLAVES参数后,可以使用allocate channel命令或configure channel 命令的parm 参数来定义内存缓冲区的大小。


磁带缓冲区的大小是在配置通道时确定的,它的默认值是由操作系统决定的,不过通常为64kb。 使用allocate channel命令可以将磁带缓冲区的大小设置为不同的值。 为了达到最佳性能,我们建议将磁带缓冲区的大小设置为256KB 或更大。 如:


Allocate channel c1 device type sbt parms="blksize=262144, ENV=(NB_ORA_CLASS=RMAN_orcl)"



如果要在磁盘上备份数据,我们必须判断操作系统是否支持异步I/O 如果支持,Oracle 会自动使用异步I/O的功能;如果不支持,此时将Oracle提供的DBWR_IO_SLAVES参数设置为非零值,通过启动多个DBWR进程Oracle 会模拟到磁盘的异步I/O.



当配置DBWR_IO_SLAVES或者BACKUP_TAPE_IO_SLAVES时,可能也需要创建一个large池。 这将帮助消除共享池争用和内存分配的错误问题,这些是在启用BACKUP_TAPE_IO_SLAVES时伴随共享池使用一起发生的问题。如果使用Oracle 10g中的Automatic Shared Memory Management(ASMM),Oracle 将管理共享池的内存分配。 如果需要手工设置large 池,则磁盘缓冲区的总大小限制为每个通道16MB。 为备份设置LARGE_POOL_SIZE参数的公式如下:


LARGE_POOL_SIZE=(number of allocated channels)*(16MB+size of tape buffer)



如果没有配置DBWR_IO_SLAVES BACKUP_TAPE_IO_SLAVESRman就不会使用large。一般来说,除非系统不支持异步I/O,这时才需要配置这些参数设置以从RMAN中获得良好的性能。




1.3 调整数据库


调整欠缺的数据库也会对备份时间产生非常消极的影响。 某些数据库的调整问题也会显著地影响还原时间。



1.3.1 调整I/O


I/O 争会降低系统的运行速度。较差的I/O分发不但会影响数据库的性能,还会影响备份和还原时间, 这是因为RMAN就是在设备上争用I/O时间的另一个进程(或者并行的多个进程)。


备份是一个读密集型(read-intensive)操作。 如果I/O 分发较差,不仅RMAN性能会受到影响,而且用户也至少会在备份操作过程中收到影响。 如果所有恢复都是完全数据库恢复,恢复操作可能会简单一点。 但是如果只恢复一个数据文件或一个表空间,由于数据库被打开并处于使用当中,就能够发现较差的I/O分发会影响恢复窗口和用户。 从根本上说,差的I/O 分发不仅会影响日常的数据库用户, 而且会导致备份和恢复操作花费更长的时间。



1.3.2 调整内存的使用


与所有的Oracle 进程相同,RMAN 也需要使用内存。 启动RMAN操作时,就会为这个Rman操作分配一个用于工作的缓冲区,我们可以根据以下因素来确定缓冲区的大小:


(1) RMAN 备份和恢复多路复用的影响


(2) 所使用的设备类型


(3) 操作期间所分配的通道数



1.3.2.1 为磁盘设备分配内存缓冲区


在磁盘设备上备份数据时,RMAN 最多可以分配16MB内存,这个内存是基于复用级别分配的。 如果复用级别诶4或以下,RMAN 会分配灭个大小为1MB16个缓冲区。这些1MB缓冲区在要备份的数据文件数之间分配。 因此,如果filesperset 参数(设置复用级别)设置为2,每个数据文件就分配81MB缓冲区。


如果filesperset参数被设置为58之间的数,RMAN 就会分配大小为512KB的缓冲区,并且均匀地分给不同的数据文件,此时,所分配的内存缓冲区不超过16MB。 如果复用级别大于8,每个数据文件爱你被分配4128kb的缓冲区,为每个数据文件分配的缓冲区总计为512KB



1.3.2.2 SBT设备分配内存缓冲区


SBT设备上备份数据时,RMAN会为所分配的每个通道分配4个缓冲区。 这些缓冲区的大小通常为256kb,因此每个通道分配的总内存为1MB。 可以使用allocate send 命令的parms blkzise 参数管理缓冲区大小。


这个内存通常是从PGA中分配的,不过如果BACKUP_TAPE_TO_SLAVES参数被设置为TRUE,除非分配了large池,否则就需要使用SGA,在这种情况下要使用large池。 因此,如果要配置I/O从属(在SBT设备上备份数据时通常应当配置I/O从属),就应当配置一个large池,以减少large池对整个内存的需求。


在下面的这