备份数据库时,输入内存缓冲区的大小和数目取决于实际执行的备份命令,事实上主要取决于在一个备份中多路复用的文件数。多路复用指的是在同一个备份片中备份其数据块的文件数。为了保持合理的内存分配,根据一起备份的文件数,分配内存缓冲区大小时需要应用下面的规则:
如果备份集内的文件数小于或等于4个,RMAN会为每个文件分配4个大小为1MB的缓冲区,缓冲区总和小于或等于16MB;
如果备份集内的文件数多于4个但少于或等于8个,RMAN会为每个文件分配4个大小为512KB的缓冲区,缓冲区总和确保少于或等于16MB;
如果备份集内的文件数多于8个,RMAN会为每个文件分配4个大小为128KB的缓冲区,确保每个要备份的文件占用512KB的缓冲区内存。
如果备份到磁盘,RMAN会为每个通过道分配4个1MB的输出缓冲区;
如果备份到磁带,RMAN会为每个通过道分配4个256KB的输出缓冲区。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 – Production
SQL> select set_count, device_type, type,filename, buffer_size, buffer_count from v$backup_async_io order by set_count,type;
SET_COUNT DEVICE_TYPE TYPE FILENAME BUFFER_SIZE BUFFER_COUNT
---------- ----------------- --------- ----------------- ----------- ------------
1 20 DISK AGGREGATE 0 0
2 20 DISK INPUT …/fda_idx_02.dbf 1048576 4
3 20 DISK INPUT …/fda_idx_01.dbf 1048576 4
4 20 DISK INPUT …/sysaux01.dbf 1048576 4
5 20 DISK INPUT …/undotbs01.dbf 1048576 4
6 20 DISK OUTPUT …/s20_1.dbf 1048576 4
7 21 DISK AGGREGATE 0 0
8 21 DISK INPUT …/oratext01.dbf 524288 6
9 21 DISK INPUT …/system01.dbf 524288 6
10 21 DISK INPUT …/users_01.dbf 524288 6
11 21 DISK INPUT …/fda_data_02.dbf 524288 6
12 21 DISK INPUT …/fda_data_01.dbf 524288 6
13 21 DISK OUTPUT …/s21_1.dbf 1048576 4
14 22 DISK AGGREGATE 0 0
15 22 DISK INPUT …/snapcf_orcl.f 1048576 16
16 22 DISK OUTPUT …/s22_1.dbf 1048576 4
17 23 DISK AGGREGATE 0 0
18 23 DISK INPUT …/snapcf_orcl.f 1048576 16
19 23 DISK OUTPUT …/o1_mf_s_%u_.bkp 1048576 4
实际测试情况是:
如果备份集内的文件数是1个,RMAN会分配大小为1MB的缓冲区,每个文件会占用16个缓冲区;
如果备份集内的文件数是4个,RMAN会分配大小为1MB的缓冲区,每个文件会占用4缓冲区;
如果备份集内的文件数是5个,RMAN会分配大小为512KB的缓冲区,每个文件会占用6缓冲区;
如果备份集内的文件数是9个,RMAN会分配大小为512KB的缓冲区,每个文件会占用4个缓冲区。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/81227/viewspace-700567/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/81227/viewspace-700567/