备份的优化和调整

在了解备份优化之前首先要知道RMAN 备份的原理:

当RMAN 发起备份任务时,会开启相应的通道工作,每一个通道在数据库服务器都有一个相对应的服务进程,RMAN 会首先调用DBMS_RCVMAN 包读取控制文件,确定数据文件的存放位置等信息,获取该信息后,RMAN 将调用DBMS_BACKUP_RESTORE 包对数据文件进行读取并备份。读取过程就是基于RMAN 备份的算法规则来编译需要备份的文件列表。RMAN 执行备份操作时,会请求Oracle 的共享内存段来创建自己备份缓冲区,与通道相对应的服务进程会去扫描数据文件中的数据块,并且将需要备份的数据块读入到输入缓冲区中,当输入缓冲区被填满时,会被转移到输出缓冲区,在转移的过程中,也会对数据块进行检测,检测是否有损坏的数据块,当输出缓冲区被填满时,就会形成备份片,与通道相对应的服务进程最终会将其写入到指定备份片的位置。

所有的备份恢复不能千篇一律,需要契合不同客户的生产环境针对性的去调整和优化,否则很有可能会导致生产环境出现问题。生产环境场景有:备份磁盘空间不足、存储I/O 慢、存储很快且cpu 资源足够等。

RMAN 备份的优点如下(以11g 为例):

1 )RMAN 会检测数据坏块

2 ) 不需要开热备,额外的重做会减少

3 )RMAN 备份只备份使用过的块

4 )RMAN 备份具有压缩特性

5 ) 支持增量备份策略

 

对于不同的场景我们需要给出不同的优化方法:

场景一:划分的备份文件系统空间不足:

存在这么一种情况,查询数据库大小略大于备份空间大小我们怎么处理?

这就要从rman 的备份特性说起两个概念:

1 )null block compression

2 )unused block compression

10.1 版本 RMAN 的压缩方式为空值压缩(null compression ),当扫描数据块进行备份时,可以进行空值压缩,对块头为空的块,在从输入缓冲区转移到输出缓冲区时将其过滤掉,不会去备份已分配但未被格式化的块。

在10.2 版本RMAN 的压缩方式又出现一种未使用块压缩(unused block compression ),这种压缩方式是过滤掉不包含数据的数据块,就是该数据块已经被使用过(被格式化过),但是不包含数据。

只有在满足以下条件的时候,Unused Block Compression 会起作用:

1 )初始化参数COMPATIBLE=10.2 或者更新的版本
2 )数据文件是本地管理模式

3 )完全备份或0 级备份

4 )备份的指定位置在磁盘上

所以备份出来的备份片相当于被压缩过,所以这也是rman 游戏备份工具一个很重要的特性,减少不必要的空间浪费。

场景二:备份文件系统空间非常小

这时候我们很容易想到rman 的压缩特性,rman  能够使用二进制压缩算法进行备份,这个二进制的压缩算法能够大大的减少备份集所需要的磁盘空间,通常情况下压缩比会达到2-4 倍

使用这种压缩方式的命令如下:

rman> backup as compressed backupset database;

1 )启用压缩将消耗更多的CPU 资源。。

2 )启用压缩备份耗时略有增加

3 )节省存储备份的空间

场景三:备份片很大,备份时间较长

加快备份速度的方法无非是开并行,这里涉及到两个关键词:通道、并行

自动分配通道(CHANNEL ):

Configure  命令来完成通道配置。如果没有用手工方式为RMAN 分配通道,RMAN 将利用预定义的设置来为命令自动分配通道

RMAN>Configure channel device type disk format ‘xxx’;


可配置自动分配多个通道

手工分配通道(PARALLELISM ):

allocate channel  命令进行分配通道,这个命令只能放在run 命令块中,并且它分配的通道也只作用于本run 块内的命令。

run {

Allocate channel d1 device type disk format ‘xxx’;

Allocate channel d2 device type disk format ‘xxx’;

Backup database;

release channel d1 ;

release channel d2 ;

}

 

注意   如果配置的通道个数据小于 PARALLELISM ,如 PARALLELISM 为 5 , configure channl 1 , 2 , 3 则 1 , 2 , 3 指定的配置备份 4 , 5 按默认的配置来备份。如果配置的通道大于 PARALLELISM , PARALLELISM 为 3 ,配置 5 个通道,则通道 4 , 5 被忽略

一个 CPU 任一时刻只能处理一个事务,并行度不能超过 CPU 数量。

 

场景四:数据库数据量很庞大,增量备份需要较长时间

这里需要打开一个数据库的特性:块跟踪

1 )块修改跟踪会记录数据文件里每个块的更新信息,这些跟踪信息保存在跟踪文件里。当启动块修改跟踪后,RMAN 使用跟踪文件里的信息,只读取改变的www.sangpi.com块信息,而不用在对整个数据文件进行扫描,从而提高了RMAN  备份的性能。

2 )块修改跟踪默认是禁用的,如果启用了增量备份,那么建议开启块修改跟踪。  启用BCT 后,不需要其他的维护操作。

3 )在备份期间,修改跟踪会维护已经标记为更改的块的位图信息。Oracle  会自动管理修改跟踪文件的大小,只保留最近最近8 次块更改的信息。  超过8 次,那么最前面的块位图信息会被当前的更改覆盖。

4 )第一个0 级的增量备份扫描整个数据文件。随后的增量备份使用块跟踪文件的信息,只扫描自上次备份以来被标记为更改的块。

5 )如果是RAC  环境,块跟踪文件必须放在共享设备上。

6 )数据库在open  或者 mounted  状态都可以启用块跟踪.

打开块跟踪:

(1 )  查看是否设置路径

SQL> showparameter db_create_file_dest

NAME                                 TYPE        VALUE

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

db_create_file_dest                  string

(2 )  设置存放块跟踪文件路径

SQL> alter system set db_create_file_dest = 'oracle/blkch' scope=both sid='*';

System altered.

(3 )  检查设置路径

SQL> show parameter db_create_file_dest

NAME                                 TYPE        VALUE

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

db_create_file_dest                  string      oracle/blkch

SQL>

(4 )  打开块跟踪

SQL> alter database enable block change tracking;

Database altered.

也可以直接指定目录或者复用已存在的文件

SQL>alter database enable block change tracking using file 'oracle/blkch/blkch.chg' reuse;

禁用块跟踪:

SQL>alter database disable block change tracking;

查看块跟踪是否可用:

SQL> select status, filename fromv$block_change_tracking;

STATUS  FILENAME

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

ENABLED /oracle/blkch/blkch.chg

 

注意   快跟踪使用场景一般有两种: 1 、常规含有增量备份的 RMAN 备份策略; 2 、应用于 XTTS 迁移,可以有效加快增量数据的备份。

在使用 RMAN  增量备份的情况下,启用块跟踪,在做增量备份时会缩短 RMAN  备份的时间,   因为不用扫描整个数据文件。   但是块跟踪也会带来其他的一些开销。   所以要根据实际情况决定是否启用块跟踪。


上一篇:P3605 [USACO17JAN]Promotion Counting P


下一篇:STL学习之mismatch();