暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

RMAN I/O同步和异步问题

DBA小记 2020-10-27
1953

几乎所有的Oracle入门教程都会在介绍Large pool的时候这样描述:”RMAN 备份使用large pool作为磁盘I/O缓冲区,配置Large pool有助于提高RMAN备份性能”,我自己在初期的时候也这么认为。

真实的情况是:除非你启用了slaves IO,否则rman并不使用large pool

Asynchronous I/O(异步)

disk: 绝大多数操作系统支持AIO,默认disk_asynch_io为TRUE,即默认启用磁盘异步IO。如果磁盘设备不支持AIO,那么会使用synchronous I/O。磁盘异步模式下RMAN I/O缓冲区域从PGA中分配,相关IO性能信息存放在V$backup_async_io视图中

tape: 磁带设备本身不支持AIO(tape I/O is always synchronous),虽然默认tape_asynch_io为TRUE,但磁带设备只能通过IO slaves模拟异步IO,所以启用磁带AIO需要另外设置backup_tape_io_slaves=TRUE。此模式下RMAN I/O缓冲区从shared pool或者large pool中分配,相关IO性能信息存放在V$backup_async_io视图中

Synchronous I/O(同步)

disk: 若disk_asynch_io设置为false,或操作系统不支持异步IO,且dbwr_io_slaves=0时启用Synchronous I/O。此时RMAN I/O缓冲区从PGA中分配,相关IO性能信息存放在V$backup_sync_io视图中

tape: 默认backup_tape_io_slaves为false,即磁带设备默认不启用AIO而使用Synchronous I/O。此时RMAN I/O缓冲区从PGA中分配,相关性能信息存放在V$backup_sync_io视图中

Slaves I/O(从属)

disk:启用disk slaves I/O,要求设置disk_asynch_io=false且dbwr_io_slaves>0。此模式下RMAN I/O缓冲区从shared pool或者large pool中分配,相关IO性能信息存放在V$backup_async_io视图中

tape:设置tape_asynch_io=true且backup_tape_io_slaves=true时启用,磁带的AIO模式其实就是使用slaves IO模拟获得的。所以此模式下的一切和tape AIO完全一样


在默认情况下Oracle对于磁盘设备使用AIO模式(disk_asynch_io=true & dbwr_io_slaves=0 by default),而对于磁带设备使用synchronous I/O(tape_asynch_io=true & backup_tape_io_slaves=false by default),都不会启用slaves I/O,所以默认情况下RMAN总是从PGA中分配缓存。换而言之在默认情况下,即便配置了较大的Large pool也不会为RMAN所用。

1、默认情况下(即disk backup使用AIO而tape backup使用sync IO),RMAN backup并不会从Large Pool中获益,而是从PGA中的KSFQ heap中分配必要的I/O内存缓冲区。当然我们还是推荐设置Large_pool_size为100M左右,因为即使是PC服务器也不会缺这一点内存

2、仅当启用I/O slaves时RMAN backup从Large Pool中分配ksfq buffer(ksfq buffer used for backup/restore),在9i/10g中常有因large pool过小而引起ORA-04031错误的案例;若large pool大小为0,那么ksfq buffer会从shared pool中分配,一方面ORA-04031:(“shared pool”,”unknown object”,”sga heap(1,0)”,”KSFQ Buffers”)错误的概率将大大增加,另一个方面将造成KSFQ与library cache间的竞争,不利于性能。这种情况下RMAN backup的确从Large pool中得到收益,设置large_pool_size为100M仍是被推荐的

3、在非slaves IO模式下RMAN从PGA的KSFQ heap子堆中分配I/O缓冲区,因为在非slaves IO模式下该内存缓冲区没有共享的必要


参数详解

1.参数类型:布尔型

2.默认值: true

3.范围: true/false

4.修改需重启实例

5.基本参数:否

该参数控制针对 datafiles, control files, and logfiles的I/O是否是异步的

如果你的平台支持异步I/O,Oracle建议你该值设为默认值(True)

如果你的异步架构不稳定,则可以设置为false

如果你的平台不支持异步I/O,则该参数无影响

如果该值为false,则需考虑将DBWR_IO_SLAVES参数设置为非0来模拟异步传输

1.参数类型:布尔型

2.默认值: true

3.范围: true/false

4.修改需重启实例

5.基本参数:否

该参数控制针对 顺序设备(磁带)的I/O是否是异步的

如果你的平台支持 顺序设备的异步I/O,Oracle建议你该值设为默认值(True)

如果你的异步架构不稳定,则可以设置为false

如果你的平台不支持 顺序设备的异步I/O,则该参数无影响

1.参数类型:整型

2.默认值: 0

3.范围: 0到操作系统决定

4.修改需重启实例

5.基本参数:否

该参数只在数据库只有一个database writer process (DBW0)时相关

它决定dbw0进程可以使用的 I/O 服务器进程(server processes)量

DBW0 进程和它的I/O服务器进程总是在写磁盘

默认该值为0并不使用服务器进程

非零值情况

当该参数为非零时,ARCH and LGWR使用的 I/O 服务器进程为4个

异步I/O关闭时,RMAN能用到的 I/O 服务器进程为4个

我们也可以在使用异步I/O的时候使用 I/O 服务器进程

I/O 服务器进程

该进程用来在不支持异步I/O或禁用了的平台模拟异步I/O


1.参数类型:布尔型

2.默认值: false

3.范围: true和false

4.使用ALTER SYSTEM ... DEFERRED修改

5.基本参数:否

该参数决定RMAN的备份,复制,恢复数据到磁带是否使用I/O server processes( slaves)

该值为true时,Oracle使用I/0服务器进程来进行磁带的写入和读取

为false,则表示不使用,这时使用shadow process 来进行

I/O 服务器进程

该进程用来在不支持异步I/O或禁用了的平台模拟异步I/O


 SQL > show parameter BACKUP_TAPE_IO_SLAVES

 

NAME                                 TYPE        VALUE

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

backup_tape_io_slaves                boolean     FALSE


ORA-02096: specified initialization parameter is not modifiable with this option

所指定的初始化参数无法更改为该候选值

 alter system set backup_tape_io_slaves = false;

会报相应的错误因为backup_tape_io_slaves属性issys_modifiable的值为deferred;

alter system set backup_tape_io_slaves = false deferred;

加上deferred就不会报错了但是表示这次修改对当前会话不发生作用在以后打开的会话中起作用故它有"推迟"影响的效果.




文章转载自DBA小记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论