OCP读书笔记(8)

摘要:
在备份和恢复操作中,使用多路复用来调整RMAN是减少瓶颈的方法之一,主要通过FILESPERSET和MAXOPENFILES两个参数来控制多路复用级别,RMANBACKUP命令的FILESPERSET参数确定放在每个备份集中的数据文件数量。如果单个通道最多备份10个数据文件,但FILESPERSET值是4,则RMAN的每个备份集仅备份4个文件。MAXOPENHLES的默认值是8。可以通过以下等式更方便地理解计算方式:multiplexing_level=min本例在一个通道中备份10个数据文件,MAXOPENFILES值是12,FILESPERSET使用默认值64。

监视RMAN作业

1. 创建rman备份:

RMAN>run {
  allocate channel ch1 type disk;
  allocate channel ch2 type disk;
  backup ascompressed 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 ascompressed backupset tablespace users;
}
/*session 2 */RMAN>run {
  set command id to 'bkup chgtrk';
  backup ascompressed 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通道,然后将数据文件分配到不同的通道,以此来调整备份的总吞吐量。为每个通道分配-个进程,这样可以通过并行处理方式加快备份过程。与此相反,可以将多个备份文件多路复用在同一个备份片中。

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

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

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

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

(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,2channel c1)
  (datafile 3,4channel 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 asbackupset
  (datafile 1,2,3channel c1)
  (datafile 4,5,6channel c2) plus archivelog;
}

配置RMAN多路技术

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

在备份和恢复操作中,使用多路复用来调整RMAN是减少瓶颈的方法之一,主要通过FILESPERSETMAXOPENFILES两个参数来控制多路复用级别
,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执行备份需要的缓冲区的数量和大小

多路复用级别输入磁盘缓冲区大小
<=416个1MB的缓冲区,分布在所有输入文件中
> 5 & < 8512MB的缓冲区,数量不定,以便将缓冲区
的总大小控制在16MB以内
>84个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选项,则备份将会终止并给出一个错误

免责声明:文章转载自《OCP读书笔记(8)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如来神掌第一式第十四招----HAPROXY详解datetime的取日期,取前一天的日期。简单记号一下下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从网络I/O模型到Netty,先深入了解下I/O多路复用

微信搜索【阿丸笔记】,关注Java/MySQL/中间件各系列原创实战笔记,干货满满。 本文是Netty系列第3篇 上一篇文章我们了解了Unix标准的5种网络I/O模型,知道了它们的核心区别与各自的优缺点。尤其是I/O多路复用模型,在高并发场景下,有着非常好的优势。而Netty也采用了I/O多路复用模型。 那Netty是如何实现I/O多路复用的呢? Nett...

浅谈Python-IO多路复用(select、poll、epoll模式)

1. 什么是IO多路复用   在传统socket通信中,存在两种基本的模式,   第一种是同步阻塞IO,其线程在遇到IO操作时会被挂起,直到数据从内核空间复制到用户空间才会停止,因为对CPython来说,很多socket相关函数均是与内核函数(系统调用)密切相关的,比如fctl与ioctl,那么采用这种模式就会存在CPU资源利用率变低,具体的模式图如下:...

Redis服务设计(处理流程、事件模型、多路复用)

简介 Redis作者: 意大利人 Salvatore Sanfilippo(网名 Antirez) 开发。Antirez 不仅帅的不像实力派,也非常有趣。Antirez 今年已经四十岁了,依旧在孜孜不倦地写代码,为 Redis 的开源事业持续贡献力量。 Redis是一个开放源代码(BSD许可)内存中的数据结构存储,用作数据库、缓存和消息代理。它支持字符串、...

1. Redis是属于多线程还是单线程?不同版本之间有什么区别?

Redis是普及率最高的技术之一,不仅是面试会被经常问到,在工作中也是非常常用的。下面我们就深入的了解一下Redis,顺便会介绍一些常见的面试题。 问题:Redis是属于单线程还是多线程? 不同版本的Redis是不同的,在Redis4.0之前,Redis是单线程运行的,但是单线程并不代表效率就低,像Nginx、Nodejs也是单线程程序,但是它们的效率并不...

也谈同步异步I/O

也谈同步异步I/O [转自: http://www.smithfox.com/?e=191 ] I/O Model 是一个很大的话题, 也是一个实践性很强的事情, 网上有各种说法和资料, 我们必须用辩证的态度去看待(包括本Blog :) ), 因为有的信息是过时的, 有些则可能是未经实践的片面的理解. 为避免走题(走到 高并发问题 上去了), 本次讨论作了...

SocketChannel简述

前言 在前面的Channel概述的分类中提到过SocketChannel主要是用来基于TCP通信的通道。这篇文章详细介绍下SocketChannel SocketChannel是什么 SocketChannel特点 SocketChannel的使用 SocketChannel A selectable channel for stream-orient...