Linux的非同步IO(AIO)在Oracle中應用
一直知道非同步IO的存在,未有深入研究已經和測試過,偶然搜尋到一些技術博主的文章,發現文章寫的比較齊全,就大概整理了一下文章,並做了簡單的測試來共享,如果你的系統遇到寫問題或者想改善一下IO的效率,可以考慮一下非同步IO的使用,尤其對使用裸裝置的提升最為明顯。
介紹: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-/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功能的支援。
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
非零說明已經開啟
5、速度測試
[oracle@anpc ~]$ sqlplus / as sysdba
SQL> select count(*) from test01;
COUNT(*)
----------
8388608
SQL> set timing on
SQL> create table test03 as select * from test01;
Table created.
Elapsed: 00:00:09.81
以前消耗的時間:
SQL> set timing on
SQL> create table test02 as select * from test01;
Table created.
Elapsed: 00:00:12.33
比較與更改前建立表的消耗時間縮短了有3秒。
至此完成測試以及調整。
E文說明:
Asynchronous I/O
With synchronous I/O, when an I/O request is submitted to the operating system,
the writing process blocks until the write is confirmed as complete. It can then continue processing.
With asynchronous I/O, processing continues while the I/O request is submitted and processed.
Use asynchronous I/O when possible to avoid bottlenecks.
Some platforms support asynchronous I/O by default, others need special configuration,
and some only support asynchronous I/O for certain underlying file system types.
介紹: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-
從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功能的支援。
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
非零說明已經開啟
5、速度測試
[oracle@anpc ~]$ sqlplus / as sysdba
SQL> select count(*) from test01;
COUNT(*)
----------
8388608
SQL> set timing on
SQL> create table test03 as select * from test01;
Table created.
Elapsed: 00:00:09.81
以前消耗的時間:
SQL> set timing on
SQL> create table test02 as select * from test01;
Table created.
Elapsed: 00:00:12.33
比較與更改前建立表的消耗時間縮短了有3秒。
至此完成測試以及調整。
E文說明:
Asynchronous I/O
With synchronous I/O, when an I/O request is submitted to the operating system,
the writing process blocks until the write is confirmed as complete. It can then continue processing.
With asynchronous I/O, processing continues while the I/O request is submitted and processed.
Use asynchronous I/O when possible to avoid bottlenecks.
Some platforms support asynchronous I/O by default, others need special configuration,
and some only support asynchronous I/O for certain underlying file system types.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24070945/viewspace-711936/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle在Linux下使用非同步IO(aio)配置(轉)OracleLinux非同步AI
- Oracle 之 AIO (非同步io)OracleAI非同步
- 轉:SYBASE在Linux下使用非同步IO(aio)配置Linux非同步AI
- IO模式和IO多路複用(阻塞IO、非阻塞IO、同步IO、非同步IO等概念)模式非同步
- Linux上Oracle啟用非同步IOLinuxOracle非同步
- Oracle在Linux下使用非同步IO配置OracleLinux非同步
- java同步非阻塞IOJava
- BIO、NIO、多路複用IO、AIOAI
- Java 非阻塞 IO 和非同步 IOJava非同步
- 【轉載】Linux上Oracle啟用非同步IOLinuxOracle非同步
- 如何解讀 Java IO、NIO 中的同步阻塞與同步非阻塞?Java
- 從同步原語看非阻塞同步以及Java中的應用Java
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- direct IO和AIOAI
- BurpSuite在非Web應用測試中的應用UIWeb
- HugePage在oracle中的應用Oracle
- golang執行緒池在IO多路複用中的應用Golang執行緒
- 談談對不同I/O模型的理解 (阻塞/非阻塞IO,同步/非同步IO)模型非同步
- linux oracle AIO實現LinuxOracleAI
- 【死磕NIO】— 阻塞IO,非阻塞IO,IO複用,訊號驅動IO,非同步IO,這你真的分的清楚嗎?非同步
- ORACLE 非同步IOOracle非同步
- 【網路IO系列】IO的五種模型,BIO、NIO、AIO、IO多路複用、 訊號驅動IO模型AI
- 索引在ORACLE中的應用分析索引Oracle
- CBO,RBO在ORACLE中的應用Oracle
- 如何給女朋友解釋什麼是IO中的阻塞、非阻塞、同步、非同步?非同步
- Linux上Oracle是否使用非同步io的診斷LinuxOracle非同步
- 11、協程和io教程01 -- 併發 並行 同步 非同步 阻塞 非阻塞 以及 IO多路複用並行非同步
- Linux在實際中的應用Linux
- 網路IO之阻塞、非阻塞、同步、非同步總結非同步
- IO通訊模型(二)同步非阻塞模式NIO(NonBlocking IO)模型模式BloC
- 聊聊對稱/非對稱加密在HTTPS中的應用加密HTTP
- ORACLE 陣列在過程中的應用Oracle陣列
- LINUX AIOLinuxAI
- 非空校驗在oracle和mysql中的用法OracleMySql
- 10g on aix 6.1 預檢查不通過 報aio 非同步io不通過AI非同步
- 【效能優化】CBO,RBO在ORACLE中的應用優化Oracle
- C++基礎::非型別模板引數在STL中的應用C++型別
- 同步阻塞、同步非阻塞、多路複用的介紹