1、首先用root使用者安裝以下必要的rpm包
# rpm -uvh libaio-0.3.106-3.2.x86_64.rpm
# rpm -uvh libaio-devel-0.3.106-3.2.x86_64.rpm
2、在系統級支援非同步i/o
與[note 225751.1]介紹的在rhel3裡面設定非同步io不同,不需要設定aio-max-size,而且'/proc/sys/fs'路徑下也沒有這個檔案。因為從2.6 kernel開始,已經取消了對io size的限制[note 549075.1]。另外根據[note 471846.1],oracle建議將aio-max-nr的值設定為1048576或更高。
#echo > /proc/sys/fs/aio-max-nr 1048576
3、在資料庫級啟用非同步i/o
首先修改資料庫引數。與[note 225751.1]在rhel 3裡面設定非同步io不同,oracle10gr2預設是開啟了對非同步io的支援的,不需要重新編譯資料庫軟體。在'$oracle_home/rdbms/lib'路徑下,也沒有'skgaioi.o'這個檔案。在某些情況下,oracle無法將io行為或事件報告給作業系統[note 365416.1],因此需要做以下操作。
這裡開始換成oracle使用者
sql>alter system set disk_asynch_io=true scope=spfile;
sql>alter system setfilesystemio_options=asynchscope=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
在oracle10gr2中aio預設已經是開啟的了。可以通過ldd或者nm來檢查oracle是否已經啟用了aio支援,有輸出代表已經啟用。
[oraprod@db01 ~]$/usr/bin/ldd $oracle_home/bin/oracle | grep libaio
libaio.so.1 => /usr/lib64/libaio.so.1 (0x00002aaaac4a9000)
[oraprod@db01 ~]$/usr/bin/nm $oracle_home/bin/oracle | grep io_getevent
w io_getevents@@libaio_0.4
4、檢查非同步i/o是否在使用
根據[note 370579.1],可以通過檢視slabinfo統計資訊檢視作業系統中aio是否執行,slab是linux的記憶體分配器,aio相關的記憶體結構已經分配,kiocb值的第二列和第三列非0即是已使用。與kernel 2.4.x不同,沒有顯示kiobuf,因為從kernel 2.5.43開始,kiobuf已經從核心中被移除。
$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
同步IO和非同步IO
同步io和非同步io 簡單的說 同步在程式設計裡,一般是指某個io操作執行完後,才可以執行後面的操作。非同步則是,將某個操作給系統,主線程去忙別的事情,等核心完成操作後通知主線程非同步操作已經完成。i windows同步i o與非同步i o 執行後的效果如下 winxp sp2 vc6.0 4 心得...
同步IO和非同步IO
同步io和非同步io 有兩種型別的檔案io同步 同步檔案io和非同步檔案io。非同步檔案io也就是重疊io。在同步檔案io中,執行緒啟動乙個io操作然後就立即進入等待狀態,直到io操作完成後才醒來繼續執行。而 非同步檔案io方式中,執行緒傳送乙個io請求到核心,然後繼續處理其他的事情,核心完成io請...
同步IO與非同步IO
非同步檔案io也就是重疊io。在同步檔案io中,執行緒啟動乙個io操作然後就立即進入等待狀態,直到io操作完成後才醒來繼續執行。而非同步檔案io方式中,執行緒傳送乙個io請求到核心,然後繼續處理其他的事情,核心完成io請求後,將會通知執行緒io操作完成了。同步io在同一時刻只允許乙個io操作,也就是...