1、同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完。相反,异步I/O操作在后台运行,I/O操作和应用程序可以同时运行,提高了系统性能; 使用异步I/O会提高I/O流量,如果应用是对裸设备进行操作,这种优势更加明显, 因此象数据库,文件服务器等应用往往会利用异步I/O,使得多个I/O操作同时执行。
Oracle在默认情况是不使用异步IO的。可查看参数filesystemio_options(默认值为none),有四种选项
ASYNCH: enable asynchronous I/O on file system files, which has no timing requirement for transmission.
DIRECTIO: enable direct I/O on file system files, which bypasses the buffer cache.
SETALL: enable both asynchronous and direct I/O on file system files.
NONE: disable both asynchronous and direct I/O on file system files.
---在系统级支持异步I/O
Oracle建议将aio-max-nr的值设置为1048576或更高。
# echo > /proc/sys/fs/aio-max-nr 1048576
---在数据库级启用异步I/O
SQL>alter system set disk_asynch_io=TRUE scope=spfile; SQL>alter system set filesystemio_options=setall scope=spfile; SQL>shutdown immediate $ cd $ORACLE_HOME/rdbms/lib $ ln -s /usr/lib/libaio.so.1 skgaio.o $ make PL_ORALIBS=-laio -f ins_rdbms.mk async_on SQL>startup
---检查异步I/O是否在使用
$ cat /proc/slabinfo | grep kio
kioctx 64 110 384 10 1 : tunables 54 27 8 : slabdata 11 11 0
kiocb 13 315 256 15 1 : tunables 120 60 8 : slabdata 21 21 44
2、Oracle异步IO缺点
异步io可能会导致坏块,所以没有dg情况下,最好禁用
在有db_file_parallel_wait等待高的情况下,可以试着禁用异步io
在异步io性能不如同步io的情况下,关闭异步io,可以调大dbwriter_processes,使用dbwr_io_slaves
3、、asynch descriptor resize等待事件
此BUG发生于11.2.0.1和11.2.0.2上,11.2.0.3修复了此问题。
解决办法是:只要将disk_asynch_io设置为false来禁用异步I/O即可。
SQL> alter system set disk_asynch_io=false scope=spfile;