Linux的异步IO(AIO)在Oracle中应用

先检查是否开启了Oracle文件的异步IO

如何v$iostat_file不存在,那可能就是操作系统不支持异步IO,如Windows上安装的Oracle。

SQL> select file_no , filetype_name , asynch_io from v$iostat_file;

SQL> select file_no , filetype_name , asynch_io from v$iostat_file;

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         0 Other                        ASYNC_OFF
         0 Control File                 ASYNC_OFF
         0 Log File                     ASYNC_OFF
         0 Archive Log                  ASYNC_OFF
         0 Data File Backup             ASYNC_OFF
         0 Data File Incremental Backup ASYNC_OFF
         0 Archive Log Backup           ASYNC_OFF
         0 Data File Copy               ASYNC_OFF
         0 Flashback Log                ASYNC_OFF
         0 Data Pump Dump File          ASYNC_OFF
         1 Data File                    ASYNC_ON

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         1 Temp File                    ASYNC_ON
         2 Data File                    ASYNC_ON
         3 Data File                    ASYNC_ON
         4 Data File                    ASYNC_ON
         5 Data File                    ASYNC_ON
         6 Data File                    ASYNC_ON

17 rows selected.

这个是一个Oracle已经启用的情况。

 

介绍:Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。

效果:使用异步 I/O 大大提高应用程序的性能.

AIO =  asynchronous IO

1、检查linux相关包

[root@anpc ~]# rpm -qa | grep aio
libaio-devel-0.3.106-3.2
libaio-0.3.106-3.2
libaio-devel-0.3.106-3.2
libaio-0.3.106-3.2
libsane-hpaio-1.6.7-4.1.el5_2.4

[root@anpc ~]# cat /proc/slabinfo | grep kio
kioctx                64     96    320   12    1 : tunables   54   27    8 : slabdata      8      8      0
kiocb                  0      0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0

kiocb值的第二列和第三列非0即是已使用。
The kioctx and kiocb are Async I/O data structures that are defined in aio.h.
If it shows a non zero value that means async io is enabled.
source code loaded /usr/src/linux-<version>/include/linux/aio.h

从2.6 kernel开始,已经取消了对IO size的限制,Oracle建议将aio-max-nr的值设置为1048576或更高。
[root@anpc ~]# echo 1048576 > /proc/sys/fs/aio-max-nr

2、检查Oracle软件是否开启AIO支持。

[oracle@anpc ~]$ /usr/bin/ldd $ORACLE_HOME/bin/oracle | grep libaio
libaio.so.1 => /usr/lib64/libaio.so.1 (0x00002aaaac4a9000)
如上面
显示说明已经开启
[oracle@anpc ~]$ /usr/bin/nm $ORACLE_HOME/bin/oracle | grep io_getevent
w io_getevents@@LIBAIO_0.4 
如上面显示说明已经开启

10GR1以前版本需要手动开启AIO,relink一下。
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk async_on
make -f ins_rdbms.mk ioracle

关闭Oracle的异步功能支持
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk async_off

3、开启Oracle数据库AIO功能的支持。
--关于参数filesystemio_options 的值有:setall、directIO 、ASYNC,setall 是系统自动判断什么时候用directIO 和ASYNC
SQL> alter system set filesystemio_options = setall scope=spfile;
SQL> alter system set disk_asynch_io = true scope=spfile;
SQL> shutdown immediate

SQL> startup

4、查看是否开启

[root@anpc ~]# cat /proc/slabinfo | grep kio
kioctx                64     96    320   12    1 : tunables   54   27    8 : slabdata      8      8      0
kiocb                 15     15    256   15    1 : tunables  120   60    8 : slabdata      1      1      0
非零说明已经开启

异步I/O的优点:
异步I/O是和同步I/O相比较来说的,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完。相反,异步I/O操作在后台运行,I/O操作和应用程序可以同时运行,提高了系统性能; 使用异步I/O会提高I/O流量,如果应用是对裸设备进行操作,这种优势更加明显, 因此像数据库,文件[url=]服务器等应用往往会利用异步I/O,使得多个I/O操作同时执行。

 

关于验证:

找一个千万级的数据表,执行一下count(*)操作,就能明显看出区别。

 

文章内容转载来源:

http://space.itpub.net/24070945/viewspace-711936

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值