RMAN备份恢复性能优化

㈠ 发现问题

   

   RMAN在做备份、恢复时所做的操作说起来很简单:

   就是把数据从“源”读到缓冲区,然后自读缓冲区写到“目的地”、并在这个过程中完成数据块的校验工作

   这一过程中会发生很多的操作、而如果某一操作慢了我们则称其为瓶颈

   发现问题的关键在于挑出这个瓶颈

   

   ① 确定备份源与备份设备的最大速度

   

      从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两个速度、只能尽量的接近、我们心里要有数

      Ⅰ 确定磁盘读速度:

      可以在数据服务器负载高峰期做一下sar –d,把物理盘的blks/s这一列加起来,再乘上操作系统块的大小

      或者

      也可以挑出一些盘或LV,做对/dev/null的dd操作,然后用sar –d 进行观察,测算速度

      Ⅱ 备份设备的速度

      可以通过并行备份多个数据量大点的文件系统获得

      

   ② 通过v$session_longops监测RMAN的性能

   

      v$session_longops是一个很有用的视图,超过6秒的操作会被记录在这个视图中

      这个视图观看RMAN的各个操作已经花费了多少时间,还需要多少时间,每一部分使用了多少时间




sys@ORCL> ed

Wrote file afiedt.buf

 

  1  SELECT A.SID,A.PROGRAM,A.STATUS,B.OPNAME,B.ELAPSED_SECONDS,B.TIME_REMAINING

  2    FROM V$SESSION A, V$SESSION_LONGOPS B

  3   WHERE A.SID = B.SID  AND

  4         A.SERIAL# = B.SERIAL# AND

  5         upper(A.PROGRAM) LIKE '%RMAN%' AND

  6*        TIME_REMAINING > 0



   ③ 通过v$backup_sync_io和v$backup_async_io可以监测IO是否有瓶颈

   

      备份最主要的部分是IO操作,因此IO也是最可能产生瓶颈的地方

      Oracle提供了v$backup_sync_io和v$backup_async_io这两张视图用于:

      观察实际的备份的速率、观察备份过程中的等待

      这两张视图中的数据存在的周期是实例运行的过程中、当数据库被重新启动,这两张视图中的数据会被清空

      

      ⑴ 同步IO瓶颈

      

         查询v$backup_sync_io视图、关注TYPE为AGGREGATE值的discrete_bytes_per_second这一列

         这一列表示每秒中以同步方式备份、恢复数据的字节数,这个值应该接近于备份设备的读、写速率

         如果这个值很小于备份设备读写速率,我们优化的机会就来了

         可以从CPU负载、备份的进程、网络、MML接口的配置等几方面进行检查、优化

         脚本:




sys@ORCL> ed

Wrote file afiedt.buf

 

  1  SELECT device_type device,TYPE,filename,

  2         to_char(open_time,'yyyymmdd hh24:mi:ss') OPEN,

  3         to_char(close_time,'yyyymmdd hh24:mi:ss') CLOSE,

  4         elapsed_time elapse,discrete_bytes_per_second d_bytes

  5    FROM v$backup_sync_io

  6   WHERE close_time>SYSDATE-1

  7*  ORDER BY close_time



      ⑵ 异步IO瓶颈

      

         Ⅰ 关注每秒备份、恢复的效率

            

            查询v$backup_async_io、关注TYPE为AGGREGATE值的effective_bytes_per_second这一列

            在生产环境,基本用的都是异步IO的方式,因此这个视图用的频率特别的多

            脚本:




sys@ORCL> ed

Wrote file afiedt.buf

 

  1  SELECT device_type device,TYPE,filename,

  2         to_char(open_time,'yyyymmdd hh24:mi:ss') OPEN,

  3         to_char(close_time,'yyyymmdd hh24:mi:ss') CLOSE,

  4         elapsed_time elapse,effective_bytes_per_second e_bytes

  5    FROM v$backup_async_io

  6   WHERE close_time>SYSDATE-1

  7*  ORDER BY close_time



            同理、当effective_bytes_per_second这一列表示每秒中以异步方式备份、恢复数据的字节数

            这个值应该接近于备份设备的读、写速率,如果这个值很小于备份设备读写速率、我们也该注意了

            

         Ⅱ 关注IO等待 

            

            v$backup_async_io与IO等待相关的几列:

            IO_COUNT:整个IO的总数 

            READY:异步方式buffer请求,buffer立即可以获复的次数 

            SHORT_WAITS:请求buffer不能立即获得,不过经过简短非的阻塞方式轮询可获的次数

            LONG_WAITS: 请求buffer不能获得,需经过阻塞的等待,等待IO设备的次数

            其中、LONG_WAIT是重点关注的对象,当LONG_WAITS/IO_COUNT这个值比较高时表明IO方式存在着瓶颈

            需要注意一下相关的文件,看一下IO分布是不是存在问题





㈡ 优化前的准备工作



   

   ⑴ 战略上

      

      ① IO方面的调整

         

         备份、恢复是一个读、写密集型的操作

         数据文件的IO均衡对备份的速度影响极大

         如果数据库在IO方面做了很好的均衡,数据文件也是跨磁盘做的条带(stripe)

         Oracle的测试是会有至少10%的备份性能提升

         

      ② 内存方面的调整

      

         RMAN备份过程是将数据读到buffer,然后通过MML接口写到备份设备

         Oracle推荐设置合理的Large pool,让RMAN的buffer出自Large pool

         

      ③ SQL的优化

         

         不好的SQL耗用IO,耗用cache等各种数据库资源

         这会让RMAN可用资源减小

         

      ④ 备份策略的调整

         

         在业务的不繁忙期进行备份,同时做好全、增量备份的设置工作

         比如DG环境,全备份完全可以从Standby结点来做,在不影响业务的同时也保证了备份的速度

         Rac环境可以从两个结点同时来备份增加读的速度

         

      

   ⑵ 战 术上

      

      ① 并行通道(Channel Parallelism)

         

         RMAN的备份、恢复的操作是通过通道(Channel)来完成的

         Channel在数据库服务器的体现是一个Server进程

         当RMAN分配一个Channel时,它即建立了一个到数据库实例的连接

         多个Channel可以相互独立的完成备份、恢复的操作

         因而活动通道数即并行通道数,简而言之为并行通道

         

      ② 多路复用(Mutiplexing) 

         

         多路复用的目的是为了加快备份时自磁盘读数据的性能,其针对的是单个channel

         当单个通道在备份时,它从多个数据文件同时读取数据,然后写到同一个backupset中

         这样的操作模式我们称之为多路复用

         多路复用级别的多少取决于三个因素:

         ● FILESPERSET参数

         ● MAXOPENFILES参数

         ● 通道读取的文件数

         例如我的库有100个数据文件,FILESPERSET参数为12,MAXOPENFILES参数为10

         那么多路复用级别=min(min(100,12),10)=10

         

      ③ 同/异步IO

         

         如下以备份到带库简单描述、比较一下在同异/步备份时数据流传送的过程:




         




       ④ 磁盘/磁带缓冲区(Buffers) 

         

         缓冲区的大小决定了单次IO所能传送数据的多少

         

         Ⅰ 磁盘缓冲区 

            

            磁盘缓冲区的大小取决于多路复用(Mutiplexing)的级别,对照关系可以参数下表:




           




            具体每个文件被分配了多大的Buffer可以通过如语句查到:




sys@ORCL> ed

Wrote file afiedt.buf

 

  1  SELECT type, filename, buffer_size, buffer_count, open_time, close_time

  2    FROM v$backup_async_io

  3*  ORDER by type, open_time, close_time





         Ⅱ 磁带缓冲区

            

            当你使用带库作为备份设备,并且分配了SBT通道,Oracle会为每一个通道分配一个Buffer

            当BACKUP_TYPE_IO_SLAVES初始化数值为TRUE时,磁带缓冲区这段内存空间会从SGA区分配

            当BACKUP_TYPE_IO_SLAVES初始化数值为FALSE时,磁带缓冲区会从PGA中分配

            ORACLE建议这部份空间从LARGE POOL中分配,避免RMAN的IO缓冲区与Library cache的争用问题

         

       

      ⑤ 磁带自身的情况

         

         每家厂商每种产品的带机都有其利弊

         

           

㈢ 提升备份的性能



    

   ① 分配合理的并行通道数

      

      实际测试表明,如果备份设备是带库,并行通道数等于带库中带机的数会达到最佳的性能

      很少的情况也是一个带机分配2或3个通道达到最佳性能的状况

      需要注意的是,如果并行通道数多于带机数,会出现Backupset在多盘磁带混合存放的情况

      因而会影响到恢复的速度

      

      如果备份到磁盘,并行通道数等于磁盘子系统的数量时会达到最佳的性能

      磁盘子系统数量指的是输出设备跨几块磁盘

      例如磁盘子系统分布在3块物理硬盘上,则应分配3个通道

      

      并行通道设置起来很简单,以配置2个并行通道举例如下:




CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 2; 

CONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' PARMS 'ENV=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)';

CONFIGURE CHANNEL 2 DEVICE TYPE 'SBT_TAPE' PARMS 'ENV=(TDPO_OPTFILE=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)';



   ② 确定合理的“多路复用”数

      

      从实际的测试及Oracle的建议来看,多路复用设置的规则为:

      如果要备份的所有磁盘或数据文件很好的做了条带(stripe),多路复用处就不大了,可以将多路复用级别设为1或者2

      如果磁盘没有做条带,多路复用应当设一个8之下的一个值

      大于8的值常用在备份有很多空块的文件或在做增量备份时

      

   ③ 使用异步IO 

      

      默认的情况下,当RMAN备份到磁带时使用的是同步IO

      同步IO在一个时点只能执行一次操作,此时的备份性能一定是很糟的

      而异步IO一个时点可以做多次操作,更好的填充写缓冲区,保证磁带的streaming

      对于支持本地异步IO的系统,启用比较简单,BACKUP_TAPE_IO_SLAVES这个初始化参数设为TRUE就可以了

      

   ④ 当备份设备为带库时,以BLKSIZE参数调整磁带缓冲区 

      

      当备到磁带时,这是改善RMAN备份性能很重要的一项

      RMAN通道的BLKSIZE参数确定了磁带缓冲区的大小

      实际的测试及Oracle的建议都表明磁带缓冲区至少应为256K

      如果你的磁带备份出现了Not Streaming问题,经过检查发现问题的并不是出现在备份空文件及做增量备份上

      你可以尝试调整BLKSIZE参数来改变磁带缓冲区,Not Streaming会有改善

      改变BLKSIZE参数也很简单,调整ALLOCATE CHANNEL或CONFIGURE CHANNEL的PARAM参数即可

      例如,可以这样将磁带缓冲区设成512K: 




RMAN>configure channel device type sbt PARAMS= “BLKSIZE=524288 ” 



   ⑤ 设定合理的LARGE_POOL_SIZE值 

      

      如果LARGE_POOL_SIZE参数没有设定,磁盘及磁带缓冲区会试图从shared pool中分配

      这样会引起shared pool中各组件如Library cache的争用问题

      LARGE POOL要分配一个合理值,如果其大小不够用,磁盘及磁带缓冲区会从PGA分配,同时alert 警告信息:




Ksfqxcre: failure to allocate chared memory means sync I/O will be used whenever async I/O to file not supported natively



   ⑥ 空文件及增量备份时需考虑的问题

      

      当备份包含大量空块的文件及做增量备份时,保证磁带缓冲区满是一件较难的事,因而会引起磁带的Not Sreaming的问题

      这方面的优化说起来也很容易,此时可以将多路复用(Multiplexing)调整到一个比较大的值,比如50

      

      

㈣ 提升恢复的性能



   ① 数据库的性能

      

      ● I/O

         

         Recovery是一个读和写都密集型的操作,它需要:

         读出归档日志的内容

         把数据文件相关的blocks读到Cache

         把Recover完的脏块回写到硬盘

         因此数据库要有良的IO均衡和良好的IO性能

         

      ● DBWR的性能

         

         Recovery过程中的脏块回写到数据文件的工作是由DBWR进程来完成的

         因此DBWR的性能也会对Recovery的性能产生影响

         DBWR的瓶颈可以通过v$session_wait视图的”free buffer waits”表现出来

         如果在各个时点总有一些这样的等待说明DBWR的写速度存在着瓶颈

         提高DBWR写速度的方法有:

         启用异步IO

         多加一个DBWR进程

         

      ● CPU的性能

         

         每一个需要recover的数据块在重做日志应用其上前首先要被读入Buffer cache中

         因此这便有一个栓(Latch)获取的过程,包括cache buffers chains和cache buffers lru chain两种栓

         获取栓对数据块修改的过程都需要CPU资源

         因此在Recovery过程中要确保有充足的CPU带宽,特别是在做并行Recovery的时候

         

         



   ② 恢复要需用到的归档日志、增量备份的量

      

      理论及实测都表明,增量备份会加快数据恢复的速度,用到的归档量越多恢复的时间会越加长

      10g及之后的版本已经加入了变化块记录的机制,会大大的加快增量备份的速度,同时大大减少对应用系统性能的影响

      

      

   ③ 需要恢复的数据文件的量

      

      恢复时要仔细分析,减少介质恢复和Recovery的量

      例如,如果坏的只是一个数据文件中的几个块,可以考虑做块的介质恢复

      

      

   ④ 归档日志的存在哪 

      

      一个好的主意就是在磁盘上存放一些近最近的归档日志,这样会加快Recovery的速度

      

      

   ⑤ 并行恢复(10g及之后版本)

      

      在多CPU系统做Recovery时,你可以为RECOVER命令指定一个并行度,会有多个并行进程同时工作

      例如:




RMAN> RECOVER TABLESPACE users PARALLEL 4; 



㈤ 总结



   

   RMAN 调优实则是项体力活、需要不断测试

   RMAN性能调整也是在需求一个平衡点,使备份恢复的性能满足实际的要求,又对生产影响最小



RMAN性能调优相关视图

视图名 说明
v$rman_backup_job_details 备份job信息
v$backup_async_io 当前正在运行的、最近完成的备份和restore操作的rman异步I/O性能信息
v$backup_sync_io 当前正在运行的、最近完成的备份和restore操作的rman同步I/O性能信息
v$process 当前活跃进程
v$session 当前活跃会话信息
v$session_longops 可以显示rman备份、还原和恢复进度
v$recovery_progress rman操作进度
v$session_wait 显示会话正在等待的事件、资源信息

 

 

 

 

 

 

 

 

 



1.找出执行rman的数据库会话

SQL> SELECT s.sid, s.serial#, p.spid, s.client_info  2    FROM v$process p, v$session s  3   WHERE p.addr = s.paddr  4     AND s.client_info LIKE '%rman%';


       SID    SERIAL# SPID                     CLIENT_INFO

       ---------- ---------- ------------------------ ----------------------------------------------------------------        

       69        153 13356                    rman channel=ORA_DISK_1


SQL>


在执行rman操作时候,可以使用"set command id"来标识rman会话进程

RMAN> run{2> allocate channel d1 type disk;3> set command id to 'my_session';4> backup database;5> }



SQL> SELECT b.sid, b.serial#, a.spid, b.client_info  2    FROM v$process a, v$session b  3   WHERE a.addr = b.paddr  4     AND b.client_info LIKE '%rman%';


       SID    SERIAL# SPID                     CLIENT_INFO

       ---------- ---------- ------------------------ ----------------------------------------------------------------        

       69        157 13434                    id=my_session,rman channel=d1


SQL>


2.查看rman job详细信息:

SQL> select session_recid,  2         input_bytes_per_sec_display,  3         output_bytes_per_sec_display,  4         time_taken_display,  5         end_time  6    from v$rman_backup_job_details  7   order by end_time;


SESSION_RECID INPUT_BYTES_PER_SEC_ OUTPUT_BYTES_PER_SEC TIME_TAKEN_DISPLAY             END_TIME

------------- -------------------- -------------------- ------------------------------ ------------------------------            

1     3.09M                3.12M            00:00:03                       17-JUN-15

            3   178.12K              122.60K            05:38:23                       17-JUN-15

           27   107.93M               75.97M            00:00:17                       23-JUN-15

           42    64.91M               50.01M            00:00:37                       25-JUN-15

           51   109.27M               76.85M            00:00:17                       25-JUN-15

           57   109.27M               76.85M            00:00:17                       25-JUN-15

           90    43.96M               31.23M            00:02:10                       29-JUN-15

           98    19.74M               14.03M            00:03:13                       29-JUN-158 rows selected.


SQL>


3.查看rman操作的进度



select s.client_info,

       sl.opname,

       sl.message,

       sl.sid,

       sl.serial#,

       p.spid,

       sl.sofar,

       sl.totalwork,

       round(sl.sofar / sl.totalwork * 100, 2) "% Complete"

  from v$session_longops sl, v$session s, v$process p where p.addr = s.paddr

   and sl.sid = s.sid

   and sl.serial# = s.serial#

   and opname LIKE 'RMAN%'

   and opname NOT LIKE '%aggregate%'

   and totalwork != 0

   and sofar <> totalwork;


如果没有开启I/O slaves,rman只是使用share pool。

如果开启了I/O slaves进行rman备份(设置了dbwr_io_slaves或backup_tape_io_slaves),需要考虑large pool的大小,因为rman会使用large pool。

Oracle官方建议: large_pool_size = num_of_allocated_channels * (16 MB + (4 * size_of_tape_buffer ))

 

RMAN的media recovery默认会根据cpu_count参数的值,开启并行恢复。


PARALLELISM --- 


我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:

RMAN > configure device type disk parallelism 3 ; 

表示启动三个通道,可以加快备份恢复的速度。


默认情况下,自动分配通道的并行度为1,如果你通过设置PARALLELISM设置了并行通道

为2,那么在run块中,如果你没有单独通过ALLOCATE CHANNEL命令指定通道,它会默认

使用2条并行通道,如果你在run命令块中指定了数个ALLOCATE CHANNEL,那么rman在执

行备份命令时会以你设置的channel为准,而不管configure中配置了多少个并行通道。


需要注意的一点是,在backup命令中有一个FILESPERSET参数,该参数是指rman建立的每

个备份集中所能包含的数据文件的最大数(注意: 不是指备份片,也就是备份出来的文件),该参数默认值为64,如果在执行

backup命令时没有指定该参数值,那么rman会仅使用第一个通道来执行备份,其它通道

将处于空闲状态。关于通道数与FILESPERSET值之间也有一个大小关系,逻辑稍显复杂。


比如, datafiles 的个数为25 , FILESPERSET = 8 ,那么备份数据库的时候生成4个backupset  (25/8=3.125), 每个备份集包含8个数据文件。


-----  并行定义通道个数, 通道定义了通道属性。



例子1 :

RMAN> configure device type disk parallelism 4;

RMAN> configure channel 1 device type disk;

RMAN> configure channel 2 device type disk;

注意: 在上面的配置中,将开启四个通道, 通道1,2采用用户的配置,3,4采用默认配置 。



例子2 :

RMAN> configure device type disk parallelism 3;

RMAN> configure channel 1 device type disk;

RMAN> configure channel 2 device type disk;

RMAN> configure channel 3 device type disk;

RMAN> configure channel 4 device type disk;

注意: 这时,RMAN将忽略parallelism 的设置,而以用户设置的通道为准。


 


---------------------------------------------------------------------------------------------- 


 


转载:



oracle如何在filesperset和channel之间作选择的?我們看看專家們怎么說


---------------------------------------------------

--biti_rainy

filesperset =files per backupset

有10个datafiles,filesperset =4

10/4=2.5

你备份数据库的时候生成3个backupset


----------------------------

--piner

filesperset是说每个备份集最多能备份几个数据文件或归档日志


一个备份集可以有多个备份片

数据文件等备份是不能跨越备份集但是能跨越备份片

所以说备份集包含某数据文件是正确的。。。


-- blog作者加入: 


注意:   maxpiecesize 用于设置备份片的大小 。比如备份片最大大小为2000M, 那么一个5G 的数据文件必须跨备份片进行备份,但是一个数据文件不能跨多个备份集。   通常一个通道对应一个备份集。


CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' MAXPIECESIZE 2000 M;



---------------------

-- husthxd

用filesperset控制备份集的尺寸

当指定filesperset参数时,rman比较filesperset与自动计算出来的值(对每个已分配通道的文件数目)

并取其中较小的那个值来保证所有的通道被使用。

如果指定或者通过组合backupSpec语句暗示的文件数目比filesperset要大,

那么rman创建多个备份集来维护正确的速率(ratio);

如果没有指定filesperset,rman比较计算出来的值(文件数目除以已分配的通道)和默认值64,

并取其中较小的那个值来保证所有通道可用。

Rman通常尝试创建足够的备份集以使所有已分配的通道有事可做。

一个例外是通道比要备份的文件还要多


 


blog作者理解举例:



例如:

A. filesperset设置为6,数据文件数目为30,通道数据为4,通过30/4可以得出每个

备份集可含有8个文件,取6和8中较小的值6,那么30/6=5个备份集,那么4个通道肯定都有事情可做了。


B. 如果不指定filesperset,假设数据文件数目为30,通道数据为4,通过30/4可以

得出每个备份集可含有8个文件,比较8和默认值64,我们取其中较小的8,那么也可以保证4个通道都有事情可做 。



在遇到数据量大、硬件条件差的数据库备份时我们会受到多种条件的限制,就有必要使用RMAN的一些限制配置了如设置备份片、备份集的最大容量,同时打开文件数的最大数量,以及读写速


率等。


综合实例

#这个命令设置了信道1的备份片最大100MB,最多可以打开8个文件,读取速度限制在100MB以内的吞吐量。

configure channel 1 device type disk maxpicesize 100m maxopenfiles 8 rate 100 MB;


maxpiecesize 和maxsetsize之间的关系区别

maxpiecesize限定单个备份片的大型,对备份的整体大小没影响,另一方面maxsetsize可以限定备份的整体大小,如果备份的数据库产生的容量大小超过备份片的最大size则备份就会失败。


限制备份片大小的原因

某种磁带可能处理的单个文件大小不能超过2G,或者某个文件系统上对超过4G的文件无法处理等等,在这种条件下都必须设置备份片的大小。


配置备份集大小设置和清理

# 设置备份集大小   

configure maxsetsize to 10G;

# 清除设置

configure maxsetsize clear;


备份优化

使用备份优化将在备份期间跳过已经在备份设备上存在的相同备份本机的备份,用下面这个参数来表示。


CONFIGURE BACKUP OPTIMIZATION OFF



监视RMAN作业

1. 创建rman备份:

RMAN> run {
  allocate channel ch1 type disk;
  allocate channel ch2 type disk;
  backup as compressed backupset tablespace users;
}

2. 当rman作业运行的时候,使用v$PROCESS和V$SESSION查看client_info信息:

复制代码

SQL> select sid, spid, client_info from v$process p join v$session s on (p.addr = s.paddr) where client_info like '%rman%';1. Create two RMAN jobs (in two different RMAN sessions) that back up the USERS and CHGTRK tablespaces and use the SET COMMAND option:/* session 1 */RMAN> run {
  set command id to 'bkup users';
  backup as compressed backupset tablespace users;
}/* session 2 */RMAN> run {
  set command id to 'bkup chgtrk';
  backup as compressed backupset tablespace users;
}2.
SQL> select sid, spid, client_info from v$process p join v$session s on (p.addr = s.paddr) where client_info like '%id=%';
SQL> select sid, serial#, opname, sofar, totalwork from v$session_longops where opname like 'RMAN%' and sofar <> totalwork;

复制代码

调整RMAN

可以通过多种方式来调整RMAN操作。

可以使用多个RMAN通道,然后将数据文件分配到不同的通道,以此来调整备份的总吞吐量。为每个通道分配-个进程,这样可以通过并行处理方式加快备份过程。与此相反,可以将多个备份文件多路复用在同一个备份片中。

对于特定通道而言,可以使用 MAXPIECESIZE 和 MAXOPENFILES 参数尽量提高通往特定输出设备的吞吐量,BACKUP命令使用这些参数以及FILESPERSET 和 BACKUP DURATION 参数来优化备份操作。

如果数据库必须保持可用,而且要满足严格的SLA要求,还可以使用 BACKUP DURATION 来尽最减少备份操作对响应时间的影响。最后,还可以使用数据库初始化参数來优化备份和恢复性能(特别是同步I/O操作)

如果了解每种调整方法的工作原理,就可以保持快捷的用户响应速度、优化硬件和软件环境以及在预算紧张的情况下(这种情况几乎始终存在)推迟升级时间,环境中的某些位置几乎始终存在着吞吐量瓶颈。瓶颈是RMAN备份期间速度最慢的步骤或任务

  1. 确定备份和还原步骤 
    RMAN备份在通道中执行任务时.将经历以下三个主要阶段:

郑州不孕不育医院:http://jbk.39.net/yiyuanzaixian/zztjyy/

(1) 读阶段 :通道将数据块读入输入缓冲区 
(2) 复制阶段 :通道将块从输入缓冲区复制到输出缓冲,并根据需要执行其他处理: 
  •验证检查块是否受到损坏,此操作不会大量使用CPU 
  •压缩使用BZIP2或ZLIB来压缩块,此操作会大量使用CPU 
  •加密使用加密算法(透明、口令保护或两者)来保护数据的安全性,此操作会大量使用CPU 
(3) 写阶段 :通道将输出缓冲区中的块写入输出设备(磁盘或磁带)

使用动态性能视图,可以确定哪个通道操作的哪个阶段出现了瓶领,并采用相应措施予以消除。在某典情况下,可能需要增加备份时间,以便确保缩短恢复时间。每天或每小时创建一次映像副本会增加备份时间,却可以极大地减少恢复时间

并行备份 :为了提高备份的速度,通过增加多个通道

1. 通过指定并行参数来实现并行备份:

RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;

2. 手动分配通道实现并行备份:

复制代码

RMAN> run {
  allocate channel c1 device type disk;
  allocate channel c2 device type disk;
  allocate channel c3 device type disk;
  backup database format='/u01/backup/rmanbk/%d_%s.dbf'  (datafile 1,2 channel c1)
  (datafile 3,4 channel c2)
  (datafile 5,6 channel c3) plus archivelog format='/u01/backup/rmanbk/%d_%s.arc';
}

复制代码

3. 指定通道的文件格式,将备份集放在不同的目录下:

复制代码

RMAN> run {
  allocate channel c1 device type disk format='/u01/backup/rmanbk/%d_%s.dbf';
  allocate channel c2 device type disk format='/u02/backup/rmanbk/%d_%s.dbf';
  backup as backupset
  (datafile 1,2,3 channel c1)
  (datafile 4,5,6 channel c2) plus archivelog;
}

复制代码

配置RMAN多路技术

可以通过多路复用备份和恢复操作来提高RMAN性能和吞吐最。使用多路复用功能时,RMAN可以同时读取多个文件,然后将数据块写入到同一个备份片中。

在备份和恢复操作中,使用多路复用来调整RMAN是减少瓶颈的方法之一,主要通过 FILESPERSET 和 MAXOPENFILES 两个参数来控制多路复用级别 
,RMAN BACKUP命令的FILESPERSET参数确定放在每个备份集中的数据文件数量。如果单个通道最多备份10个数据文件,但FILESPERSET值是4,则RMAN的每个备份集仅备份4个文件(取min(10,4))。FILESPERSET参数的默认值是64。

多路复用级别(写入到同一备份片的输入文件数量,或从同一备份片读取的输入文件数量)是MAXOPENFILES和每个备份集中的文件数量中的最小者。MAXOPENHLES的默认值是8。可以通过以下等式更方便地理解计算方式: 
multiplexing_level = min(MAXOPENFILES, min(FILESPERSET, files__per_channel))

本例在一个通道中备份10个数据文件,MAXOPENFILES值是12, FILESPERSET使用默认值64。因此,使用以下等式计算多路复用级别: 
multiplexing_level=min(12, min(64, 10))=10

RMAN根据RMAN作业中的多路复用级别来分配不同数量和大小的磁盘I/O缓冲区。在RMAN根据前面提到的等式,使用FILESPERSET和MAXOPENFILES参数确定了多路复用级别后,可以使用下表提供的信息确定RMAN执行备份需要的缓冲区的数量和大小

多路复用级别 输入磁盘缓冲区大小
<=4 16个1MB的缓冲区,分布在所有输入文件中
> 5 & < 8 512MB的缓冲区,数量不定,以便将缓冲区 
的总大小控制在16MB以内
>8 4个128KB缓冲区(针对每个输入文件的512KB)

Oracle建议将FILESPERSET值设置为小于等于8的值,以便优化恢复性能。也就是说,如果将过多的输入文件放在单个备份集中,由于在恢复单个数据文件时RESTORE或RECOVER命令仍然需要读取备份集中大童的多余块,所以恢复速度将减慢

配置RMAN使用异步I/O

在RMAN环境中使用同步I/O还是异步I/O取决于多种因素。这些因素包括为备份集使用的设备类型(磁盘或磁带),以及输出设备或主机操作系统支持同步I/O还是支持异步I/O,即使主机操作系统或设备不支持本地异步I/O,仍然可以配置RMAN,以便使用诸如DBWR_IO_SLAVES这样的初始化参数模拟异步I/O

1. 了解异步I/O和同步I/O

当RMAN读写数据时,I/O操作要么是同步操作,要么是异步操作。同步I/O操作不允许服务器进程一次执行多个操作。只有在完成一个操作后才能开始另一个操作。而异步操作可以启动一个I/O操作,然后立即执行其他操作(包括启动另一个I/O操作) 
可以 使用初始化参数控制I/O操作的类型 : 
对于 磁带备份 而言,可以将 BACKUP_TAPE_IO_SLAVES 设置为TRUE,以将备份配置为使用异步操作,否则,将其设置为FALSE以便使用同步操作。默认值是FALSE。 
对于 磁盘备份 而言,大多数现代操作系统支持本地异步I/O。但是,如果操作系统不予支持,仍然可以将BACKUP_TAPE_IO_SLAVES设置为TRUE,并通过将 DBWR_IO_SLAVES 设置为 非零值 指示Oracle模拟异步I/O,这会分配 4个从属备份磁盘I/O ,以便模拟RMAN异步I/O操作

2.监视异步I/O 
为了监视异步I/O操作,使用动态性能视图 V$BACKUP_ASYNC_IO 。重要的监视列如下: 
  • IO_COUNT :在文件中执行的I/O数量。 
  • LONG_WAITS :备份或还原进程必须告知OS等待I/O完成的次数。 
  • SHORT_WAIT_TlME_TOTAL :非阻塞轮询I/O完成占用的总时间(以0.01秒为单位) 
  • LONG_WAIT_TIME_TOTAL :阻塞等待I/O完成占用的总时间(以0.01秒为单位) 
如果LONG_WAITS与IO_COUNT的比率达到最大,这很可能是备份过程中的瓶颈。如果SHORT_WAIT_TIME_TOTAL 和 LONG_WAlT_TIME_TOTAL 是非零值,则也指示出现了瓶颈。此示例确定两个包含非零比率的输入文件:

SQL> select long_waits / io_count waitcountratio, filename from v$backup_async_io where long_waits / io_count > 0 order by long_waits / io_count desc;

对于这个文件而言,可以考虑增加多路复用程度,以便减少或消除备份时的等待时间

3.监视同步I/O 
动态性能视图V$BACKUP_SYNC_IO将帮助确定同步I/O操作中的瓶颈以及备份作业的进度。使用DISCRETE_BYTES_PER_SECOND列来查看操作的I/O比率。此后将此比率与输出设备(例如磁带设备)的最大比率做比较。如果比率低得多,则可以调整进程,通过使用并行化或增加通道多路复用级别来提高备份操作的吞吐最

SQL> select DISCRETE_BYTES_PER_SECOND from v$backup_sync_io;

如果正在使用同步I/O,但将BACKUP_TAB_IO_SLAVES设置为TRUE,则可在V$BACKUP_ASYNC_IO中监视I/O性能

BACKUP DURATION

指定完成备份需要的时间。可以使用 MINIMIZE TIME 限制此选项以便尽快运行备份,也可以使用 MINIMIZE LOAD 限制此选项以便使用在BACKUP DURATION窗口中指定的全部时间。此外,还可以使用 PARTIAL 选项,以便保存由于时间限制而终止的部分备份。例如,为了将完全数据库备份的时间限制在2小时之内,则尽可能快地运行并保存一部分备份,那么可以使用此命令:

RMAN> backup duration 2:00 partial database;

如果未在指定的时间内完成备份,但连续的BACKUP命令完成了备份,而且使用了PARTIAL选项,则仍然可以在恢复场景中使用部分备份。如果不使用PARTIAL选项,则备份将会终止并给出一个错误


猜你喜欢

转载自blog.51cto.com/14478010/2425928
今日推荐