ABout db file async I/O submit ?

前不见,某客户的系统遭遇性能问题,该环境redo量较大,高峰超过20m/s。 业务应用程序在运行过程之中发现运行时间
不稳定,有时很快,有时很慢。 我通过检查发现了一个比较奇怪的event(db file async I/O submit),以前还真没遇到过,我们先来看下load profile的数据:

 

 

 

 

 

 

 

 

 

 

可以看到,每秒19m左右的redo size。 我们来看一下top 5 event:

 

 

 

 

 

 

 

单纯的从top 5来看,貌似看不出来。 实际上我通过监控v$session发现是存在的,我当时利用的是如下监控SQL:
select inst_id,event,count(1) from gv$session where wait_class#<> 6 group by inst_id,event order by 1,3;

top 5 event居然没有,那说明什么问题? 说明该event 是后台的event。awr 报告中仍然 是可以看出来的,如下:

 

可以看到排第1位的event是 db file async I/O submit。 很明显,从字面意思上来看,就可以判断,该event是跟异步IO相关的等待事件。实际上,该event是Oracle 11.2 引入的一个新的等待事件。关于该event,Oracle metalink有相关文档进行了描述(Doc id :1274737.1),该文档是这样解释的:

According to unpublished
Bug 9649885 – DB FILE ASYNC I/O SUBMIT EVENT NOT TRACKED WHEN DISK_ASYCH_IO = TRUE
when DISK_ASYNCH_IO=TRUE, the wait event ‘db file async I/O submit’ is posted even if the IO calls cannot be performed asynchronously and this is the current behavior.
The tests show the following behavior:
disk_asynch_io          filesystemio_options        strace DBWR         AIO       DBWR waits
FALSE                                           NONE                     pwrite64            NO      db file parallel write
FALSE                                      ASYNCH                      pwrite64            NO     db file parallel write
TRUE                                       ASYNCH                   io_submit/          YES     db file parallel write
io_getevents
TRUE                                           NONE                       pwrite64            NO      db file async I/O submit

 

从metalink 文档来看,即使disk_asynch_io参数设置为true,操作系统本身也支持AIO;也并不代表oracle就能进行AIO操作。可以看到,还必须设置filesystem_options参数,建议设置为ASYNCH或setall即可.我们最后来观察下调整之后awr的情况。如下:

 

 

 

 

 

 

 

 

 

 

同时db file async I/O submit等待 也明显降低了,同时db file parallel write等待上升,但是其等待时间并不高,仅为246s.

我们可以看到,调整之后db file sequential read的wait times明显降低,降低到2w 秒左右。

补充:在Oracle 11.2版本之中,可以通过试图(v$iostat_file)来直接查询数据库的datafile是否启用了异步IO,如下:
set lines 200
set pagesize 2000
col name for a65
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’);


评论

《“ABout db file async I/O submit ?”》 有 1 条评论

  1. msdnchina 的头像
    msdnchina

    支持r总!!!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注