linux direct io 设置,direct IO和AIO

Raw device相较于block device,I/O操作不需要OS buffer cache,消除了文件系统buffer带来的额外开销(inodes/free list);

配置RAC若没有使用OCFS/NFS,则所有的文件必须存放在raw device上以便共享;

不同的raw partitions应该位于不同的磁盘,以避免竞争;

数据文件必须要比所在的raw partition略小,至少要空出2个数据块以保存OS信息;

Linux最多可以使用255个raw devices(/dev/raw);

既支持direct I/O又支持AIO

Direct I/O当oracle使用文件系统的buffer时,读取数据块时须经历如下步骤 :disk -> 文件系统buffer -> oracle buffer,有时候也会带来性能提升,比如当oracle发生物理读时,有可能从文件系统buffer获取该数据块,避免了真正的磁盘读;

因此并非所有情形都适用direct IO,写密集的文件(redo log/temp file)适合单独放在raw device上;

从oracle10R2起,数据文件默认启用direct IO,以避免内核开销;

AIOLinux 2.6新特性,当应用发起I/O请求,在等待I/O操作时可以去执行别的任务;

oracle 9.2开始支持AIO

Disk_asynch_io:决定数据文件是否开启async I/O

Filesystemio_options:依赖于disk_asynch_io参数的设置,提供更细粒度的管理;比如当disk_asynch_io设置为true时,可以让裸设备使用async I/O的同时对文件系统禁用此功能;该参数可有如下4种设置:

1. "asynch" : means buffered I/O + Async I/O,enable asynchronous I/O on file system files

2. "directIO" : means Direct I/O only,enable direct I/O on file system files

3. "setall" : means Direct I/O + Async I/O,enable both asynchronous and direct I/O on file system files

4. "none" : disables Async I/O and Direct I/O

如要对oracle开启AIO,还需要编译binary

cd to $ORACLE_HOME/rdbms/lib

a) make -f ins_rdbms.mk async_on

b) make -f ins_rdbms.mk ioracle

适用场景:

1 Raw device

2使用O_DIRECT选项open的文件系统,诸如ext2/ext3/jfs/xfs

3 AIO不适用于sockets

注:O_DIRECT,Open()用到的一个flag,开启块设备的直接读写,与libaio/librt一起协同工作;

如何检查系统使用了direct I/O使用strace跟踪dbwr进程,与此同时打开一个datafile

$ strace -o /tmp/strace_dbwr.out -p 如果使用了direct I/O,则显示

...

156 open("/emea/bde/32bit/app/oracle/oradata/EMB111W3/system01.dbf", O_RDWR|O_SYNC|O_DIRECT|O_LARGEFILE) = 13

...

如何检查系统使用了AIOslabinfo维护了内存中的object信息,通过查看它可以获知

$ cat /proc/slabinfo | grep kio

If Async I/O is enabled:

$ cat /proc/slabinfo | grep kio

kioctx 270 270 128 9 9 1 : 252 126

kiocb 66080 66080 96 1652 1652 1 : 252 126

kiobuf 236 236 64 4 4 1 : 252 126

同时dbw0的strace日志显示如下

...io_submit(3071864832, 1, {{0xb7302e34, 0, 1, 0, 21}}) = 1gettimeofday({1176916625, 58882}, NULL) = 0io_getevents(-1223102464, 1, 1024, {{0xb7302e34, 0xb7302e34, 8192, 0}}, {600, 0}) = 1...

如果没有开启AIO,则为以下形式

...pwrite64(21, "\6\242\0\0004\21\300\0\220B\243\0\0\0\1\6\207\357\0\0\1"..., 8192, 36077568) = 8192times(NULL) = 1775653082times(NULL) = 1775653082pwrite64(21, "\6\242\0\0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-720749/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值