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
相較於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,以避免核心開銷;
AIO
Linux 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
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
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
...
使用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
...
如何檢查系統使用了AIO
slabinfo維護了記憶體中的object資訊,透過檢視它可以獲知
$ cat /proc/slabinfo | grep kio
If Async I/O is enabled:
slabinfo維護了記憶體中的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
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...
...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
...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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 之 AIO (非同步io)OracleAI非同步
- BIO、NIO、多路複用IO、AIOAI
- 非同步IO,同步IO,Direct IO,FILESYSTEMIO_OPTIONS, DISK_ASYNCH_IO [final]非同步
- 【網路IO系列】IO的五種模型,BIO、NIO、AIO、IO多路複用、 訊號驅動IO模型AI
- 今天我們來聊Java IO模型,BIO、NIO、AIO三種常見IO模型Java模型AI
- Oracle在Linux下使用非同步IO(aio)配置(轉)OracleLinux非同步AI
- 轉:SYBASE在Linux下使用非同步IO(aio)配置Linux非同步AI
- Linux的非同步IO(AIO)在Oracle中應用Linux非同步AIOracle
- 【TUNE_ORACLE】等待事件之IO等待“direct path write”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path write temp”Oracle事件
- 關於java流的幾個概念:IO、BIO、NIO、AIO,有幾個人全知道?JavaAI
- 10g on aix 6.1 預檢查不通過 報aio 非同步io不通過AI非同步
- BIO、NIO、AIOAI
- AIO 簡介AI
- LINUX AIOLinuxAI
- Conventional Path Export和Direct Path ExportExport
- Java IO1:IO和FileJava
- IO模式和IO多路複用(阻塞IO、非阻塞IO、同步IO、非同步IO等概念)模式非同步
- Java 非阻塞 IO 和非同步 IOJava非同步
- Java BIO,NIO,AIOJavaAI
- Java--NIO&&AIOJavaAI
- 標準io和系統io的辨析
- Java IO 和 NIOJava
- Direct3D基礎概念和模型整理3D模型
- BIO,NIO,AIO概覽AI
- NIO、BIO、AIO區別AI
- FastAPI之阻塞式io和非阻塞式ioASTAPI
- direct3d---direct11 rendering pipeline3D
- NIO和傳統IO
- 解決direct path read 與 direct path write問題
- java BIO/NIO/AIO 學習JavaAI
- nio aio netty區別AINetty
- 為何不選擇lunix AIOAI
- BIO、NIO、AIO的區別AI
- linux oracle AIO實現LinuxOracleAI
- firewalld:direct規則
- 檔案讀寫網路IO簡單瞭解,同步IO和非同步IO非同步