研读了下RMAN对内存的使用,有很多精细的地方。
1.RMAN如何使用内存
对于每一个server process(一般就是 channel):
- 为每个磁盘文件分配4个input buffer
- 为每个backup piece分配4个output buffer
所以减小同时打开的文件数可以减小对内存的使用。 设置 MAXOPENFILES =
在 对文件的操作过程中,每个buffer会专属于这个文件,而且会被循环使用。 在input buffer中可能会包含不需要被备份的block。 然后需要备份的block会从input buffer复制到output buffer中,在这个过程里会进行block的有效性检查。
2. buffer大小
每个input buffer的大小为
db_block_size * db_file_direct_io_count (9i以后为隐含参数_DB_FILE_DIRECT_IO_COUNT,默认是1M,也许会根据OS的max_io_size调整)
所以完整的input buffer 大小为
buffer个数(4) * 打开文件数 * 单个buffer大小
关于output buffer:
磁盘:同上,只不过“打开文件数”变成“backup piece个数”
磁带:9i/10G, buffer size默认256K
3. 内存的出处
一 般来说,Channel的server process是从PGA里分配内存。但如果使用了IO Slave, 则会从SGA里分配,也就是large pool,因为这部分内存需要共享。如果Slave从SGA中得不到足够的内存,则会报4031,slave被停掉,但server process会继续从PGA中申请buffer,继续操作。
4. 关于 IO Slaves
实际就是启动一些子进程,把 读 和 写 操作分开进行,提高效率。
[@more@]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/225056/viewspace-1022333/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/225056/viewspace-1022333/