天天看點

Oracle 之 AIO (異步io)

Linux 異步 I/O (AIO)是 Linux 核心中提供的一個增強的功能。它是Linux 2.6 版本核心的一個标準特性,AIO 背後的基本思想是允許程序發起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍後或在接收到 I/O 操作完成的通知時,程序就可以檢索 I/O 操作的結果。

同步IO:線程啟動一個IO操作然後就立即進入等待狀态,直到IO操作完成後才醒來繼續執行。

異步IO:線程發送一個IO請求到核心,然後繼續處理其他的事情,核心完成IO請求後,将會通知線程IO操作完成

補充:當背景等待事件排在第一的是 db file async I/O submit,這是一個異步IO相關的等待事件,可以考慮開啟異步io。

1、--檢視系統是否使用異步IO 。 slab是Linux的記憶體配置設定器,AIO相關的記憶體結構已經配置設定。

more /proc/slabinfo |grep kio

[root@localhost ~]# grep kio /proc/slabinfo

kioctx 0 0 384 10 1 : tunables 54 27 0 : slabdata 0 0 0

kiocb 0 0 256 15 1 : tunables 120 60 0 : slabdata 0 0 0

看到kiocb行顯示為0,說明異步IO沒有啟動。

2、 檢視資料庫是否開啟異步io

(11G)SYS@qixindb> show parameter disk_asynch_io

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

disk_asynch_io boolean TRUE

(11G)SYS@qixindb> show parameter filesystem

filesystemio_options string none

filesystemio_options 的四種值:

ASYNCH: enable asynchronous I/O on file system files, which has no timing requirement for transmission.

在檔案系統檔案上啟用異步I/O,在資料傳送上沒有計時要求。

DIRECTIO: enable direct I/O on file system files, which bypasses the buffer cache.

在檔案系統檔案上啟用直接I/O,繞過buffer cache。

SETALL: enable both asynchronous and direct I/O on file system files.

在檔案系統檔案上啟用異步和直接I/O。

NONE: disable both asynchronous and direct I/O on file system files.

在檔案系統檔案上禁用異步和直接I/O。

3、 oracle已經連結了aio的包

[oracle@localhost ~]$ /usr/bin/ldd $ORACLE_HOME/bin/oracle | grep libaio

libaio.so.1 => /lib64/libaio.so.1 (0x0000003e13000000)

說明:檢查顯示oracle已經連結了aio的包

4、 調整資料庫參數 開啟aio

資料庫中的filesystemio_options參數設定為none,看來oracle中也沒有配置異步IO,

這裡可以将資料庫中的filesystemio_options參數調整為setall;

SQL> alter system set filesystemio_options = setall scope=spfile; 

SQL> alter system set disk_asynch_io = true scope=spfile; 

SQL> shutdown immediate;

SQL> startup;

5、檢視aio是否生效

[oracle@localhost ~]$ more /proc/slabinfo |grep kio

kioctx 130 160 384 10 1 : tunables 54 27 8 : slabdata 16 16 0

kiocb 16 30 256 15 1 : tunables 120 60 8 : slabdata 2 2 1

6、 資料庫層面檢視是否開啟異步io

select name, asynch_io

from v$datafile f, v$iostat_file i

where f.file# = i.file_no

and (filetype_name = 'Data File' or filetype_name = 'Temp File');

文章可以轉載,必須以連結形式标明出處。

本文轉自 張沖andy 部落格園部落格,原文連結:http://www.cnblogs.com/andy6/p/7492016.html   ,如需轉載請自行聯系原作者