在同步IO中,线程启动一个IO请求之后就进入等待状态,知道IO结束后线程才结束等待,转而去处理其他请求。异步IO将IO请求发送到内核后就不管了,无需等待IO操作完成,就去处理其他事情了。异步IO可以提高性能。但是显而易见的是对磁盘处理IO能力有较高要求,否则提交的处理请求多,处理能力跟不上,根本无法达到提高性能的要求。异步IO需要Linux内核是2.6版本。 检查操作系统是否启用异步IO: cat /proc/slabinfo | grep kio kioctx 29 40 384 10 1 : tunables 54 27 8 : slabdata 4 4 0 kiocb 0 0 256 15 1 : tunables 120 60 8 : slabdata 0 0 0 kiocb前两个值是0,表明异步IO没有启用。 要启用异步IO,需要两个参数配合: alter system set filesystemio_options=setall scope=spfile; alter system set disk_asynch_io = true scope=spfile; --默认就是开启的 disk_asynch_io开启后还需要filesystemio_options也开启,不然还是不会启用,类似双开关。这种默认情况会出现db file async I/O submit等待事件。 filesystemio_options参数有四个值: ASYNCH:在文件系统文件上启用异步I/O,在数据传送上没有计时要求。 DIRECTIO:在文件系统文件上启用直接I/O,绕过buffer cache。 SETALL:在文件系统文件上启用异步和直接I/O。 NONE:在文件系统文件上禁用异步和直接I/O。 如果disk_asynch_io=false的话还可以设置参数dbwr_io_slaves为一个大于0的值来模仿异步io。 内核参数中,fs.aio-max-nr参数指的是可以同时拥有的的异步IO请求数目。oracle建议大于等于1048576。 root@bd-dev-mingshuo-183:/home/oracle#more /etc/sysctl.conf |grep aio fs.aio-max-nr = 1048576 SQL> sho parameter disk_asynch_io NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ disk_asynch_io boolean TRUE SQL> sho parameter filesystem NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ filesystemio_options string none root@bd-dev-mingshuo-183:/home/oracle#ps -ef|grep dbw root 5068 4412 0 16:56 pts/5 00:00:00 grep dbw oracle 10201 1 0 Jul11 ? 00:02:41 ora_dbw0_mingdb root@bd-dev-mingshuo-183:strace -p 10201 -o /home/oracle/dbwn.trc 写入一些数据: SQL> create table test_io as select * from user_objects; SQL> update test_io set object_id=11 ; 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 0 External Table ASYNC_OFF FILE_NO FILETYPE_NAME ASYNCH_IO ---------- ---------------------------- --------- 1 Data File ASYNC_OFF 1 Temp File ASYNC_OFF 2 Data File ASYNC_OFF 2 Temp File ASYNC_OFF 3 Data File ASYNC_OFF 3 Temp File ASYNC_OFF 4 Data File ASYNC_OFF 5 Data File ASYNC_OFF 6 Data File ASYNC_OFF 7 Data File ASYNC_OFF 8 Data File ASYNC_OFF FILE_NO FILETYPE_NAME ASYNCH_IO ---------- ---------------------------- --------- 9 Data File ASYNC_OFF 10 Data File ASYNC_OFF 11 Data File ASYNC_OFF 14 Data File ASYNC_OFF 15 Data File ASYNC_OFF 27 rows selected. 修改参数并重启 alter system set filesystemio_options=setall scope=spfile; startup force --测试环境,暴力了一点。 重启后再写入一些数据 root@bd-dev-mingshuo-183:/home/oracle#ps -ef|grep dbw oracle 5137 1 0 16:59 ? 00:00:00 ora_dbw0_mingdb root 5374 4412 0 16:59 pts/5 00:00:00 grep dbw strace -p 5137 -o /home/oracle/dbwn_aio.trc 对比两种情况下的trace文件: 同步IO: root@bd-dev-mingshuo-183:/home/oracle#more dbwn.trc |grep pwrite pwrite(267, "\2\242\0\0FW\202\1\326\351;\0\0\0\10\4j\257\0\0\207\0\35\0\211\0\0\0\"\0\f\f"..., 8192, 1256767488) = 8192 pwrite(267, "\2\242\0\0\360g\202\1\275\351;\0\0\0\2\4X\17\0\0\235\0\0\0\213\0\0\0\37\00099"..., 8192, 1291714560) = 8192 pwrite(267, "\2\242\0\0\303\177\202\1\276\351;\0\0\0\2\4\351\367\0\0\254\0\31\0\212\0\0\0 \00011"..., 8192, 1341677568) = 8192 pwrite(267, "\2\242\0\0\260\213\202\1\270\351;\0\0\0\4\4\263_\0\0&\1\31\0006\0\0\0\21\0&&"..., 8192, 1366687744) = 8192 异步IO: more /home/oracle/dbwn_aio.trc|grep io_ io_submit(140219848069120, 1, {{data:0x7f8775482ed0, pwrite, filedes:262, str:"\6\242\0\0\3Y\0\1\246z=\0\0\0\1\6\246\310\0\0\2\0\0\0\322\"\0\0\245z=\0"..., nbytes:8192, offset:186671104}}) = 1 io_getevents(140219848069120, 1, 128, {{0x7f8775482ed0, 0x7f8775482ed0, 8192, 0}}, {600, 0}) = 1 io_submit(140219848069120, 1, {{data:0x7f8775482ed0, pwrite, filedes:262, str:"\6\242\0\0\360j\0\1\246z=\0\0\0\1\6\257\337\0\0\1\36@\0\323\"\0\0\245z=\0"..., nbytes:8192, offset:224264192}}) = 1 io_getevents(140219848069120, 1, 128, {{0x7f8775482ed0, 0x7f8775482ed0, 8192, 0}}, {600, 0}) = 1 io_submit(140219848069120, 1, {{data:0x7f8775482ed0, pwrite, filedes:262, str:"\6\242\0\0\177D\0\1\246z=\0\0\0\1\6\305\207\0\0\2\0\0\0\324\"\0\0\245z=\0"..., nbytes:8192, offset:143646720}}) = 1 io_getevents(140219848069120, 1, 128, {{0x7f8775482ed0, 0x7f8775482ed0, 8192, 0}}, {600, 0}) = 1 pwrite代表同步IO。 io_submit/io_getevents代表异步IO。io_submit代表一次异步IO请求,io_getevents获得IO处理结果。获取结果的目的是将结果写入io_event,而且在io_submit和io_getevents之间还有很多步骤,并不是这里看到的请求了还在继续等待,好像与异步IO相违背,其实并没有。 开启异步IO后: 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 0 External Table ASYNC_OFF FILE_NO FILETYPE_NAME ASYNCH_IO ---------- ---------------------------- --------- 1 Data File ASYNC_ON 1 Temp File ASYNC_ON 2 Data File ASYNC_ON 2 Temp File ASYNC_ON 3 Data File ASYNC_ON 3 Temp File ASYNC_ON 4 Data File ASYNC_ON 5 Data File ASYNC_ON 6 Data File ASYNC_ON 7 Data File ASYNC_ON 8 Data File ASYNC_ON FILE_NO FILETYPE_NAME ASYNCH_IO ---------- ---------------------------- --------- 9 Data File ASYNC_ON 10 Data File ASYNC_ON 11 Data File ASYNC_ON 14 Data File ASYNC_ON 15 Data File ASYNC_ON 27 rows selected. 数据文件和临时文件都变成异步方式了,不过还是有一些文件仍然是同步,这可能是因为不能丢数据的缘故。比如日志文件如果启用异步IO了,那么很可能就会造成数据丢失。
oracle 异步IO简述
来源:这里教程网
时间:2026-03-03 11:48:24
作者:
编辑推荐:
- 坑爹的Oracle 11.2.0.303-03
- word2010启动很慢的解决方法03-03
- word2010合并字符的两种方法03-03
- oracle 异步IO简述03-03
- Oracle常用性能分析定位语句记录03-03
- 教学课程安排03-03
- word2010中输入根号的方法步骤图03-03
- word2010怎么设置打印预览03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 用好HugePage,告别Linux性能故障
用好HugePage,告别Linux性能故障
26-03-03 - Maya建模教程:打造最逼真的可乐瓶子
Maya建模教程:打造最逼真的可乐瓶子
26-03-03 - Oracle 性能优化之内核的shmall 和shmmax 参数
Oracle 性能优化之内核的shmall 和shmmax 参数
26-03-03 - Oracle 性能优化 之 游标及 SQL
Oracle 性能优化 之 游标及 SQL
26-03-03 - ORACLE启动报错之ORA-03113&ORA-16038&ORA-30012
- 《SAW》John制作解析:人物灯光材质篇
《SAW》John制作解析:人物灯光材质篇
26-03-03 - Maya教程:《后羿射日》3D效果制作解析
Maya教程:《后羿射日》3D效果制作解析
26-03-03 - 补丁psu、spu、cpu的意思
补丁psu、spu、cpu的意思
26-03-03 - Maya教程:详解《SAW》制作景材质篇
Maya教程:详解《SAW》制作景材质篇
26-03-03 - word2010中怎么加密码
word2010中怎么加密码
26-03-03
