一 前言
filesystemio_options 控制着操作系统io的设置。该参数只作用于文件系统。它有四个值可供设置,分别是:{none | setall | directIO | asynch }。该参数默认值受数据库版本和操作系统类型及操作系统版本影响。
从oracle 10G开始,对于ASM磁盘管理的情况,filesystem_option参数不作用于ASM磁盘管理的数据库。
二 I/O说明
2.1 Synchronous I/O说明
在Synchronous I/O的机制下,若一个Oracle进程想调用一个I/O请求,那么必须等待其他请求完成后才能调用。例如,如果它发起对几个数据块的读取,那么进程就必须等待它把所有数据块都读取到内存之后,才能进行下一个动作。
2.2 Asynchronous I/O说明
在Asynchronous I/O的机制下,进程可以与I/O请求同时工作。对已经读取的数据块,可以直接进行处理,不用等待所有数据块全部加载完毕再处理。
3 buffer I/O说明
在buffer I/O机制下,操作系统有自己的一套用于维护磁盘数据的cache,而不是直接从process buffer读取或者写入。其原理是从磁盘中读取数据写入cache,然后拷贝至process buffer。或者从process buffer中拷贝至cache然后写入到磁盘中。
2.4 direct I/O说明
Direct I/O 能让所有的读和写的请求直接来自于磁盘,绕过操作系统缓存。
在ASM磁盘管理下,为了防止集群管理的数据库的数据损坏,必须直接使用Direct I/O。
对于使用文件系统的数据库环境,Oracle发出的读取请求可以从OS缓冲区中得到满足,而一旦启用direct I/O又不增加SGA大小,将导致磁盘读取需要更多的时间才能完成。为了充分利用direct I/O,需要将用于OS缓存部分增加到数据库SGA中。
三 filesystemio_options和disk_asynch_io参数说明
disk_asynch_io是相当于主开关,不管是文件系统还是裸设备,它都控制着异步io的开启与关闭,filesystemio_options是子开关,控制着文件系统上的异步io。如果数据库使用了文件系统,那么I/O只受filesystemio_options控制。
3.1 RAC的情况
RAC环境下,direct I/O是默认开启的。并且在ASM磁盘管理下,I/O肯定是异步的,而且直接做的是direct I/O。所以,对于ASM磁盘管理,不用设置filesystemio_options,只要设置合理的SGA和PGA大小即可。(详情见mos:Document 751463.1)
3.2 单机的情况
在文件系统文件管理的情况下,那么异步I/O的开启则受filesystemio_options的控制影响。
以下是Oracle官方文件系统管理的情况下,使用同/异步IO,缓存/直接IO的设置矩阵说明。

文件系统设为开启异步和直接IO那么就选setall选项,开启同步和直接IO就选directIO选项。
四 参数配置说明
1、单机环境下,异步IO受filesystemio_options控制,此参数用于特定的平台,各个操作系统平台默认值不一样,linux平台默认是none,更改选项语句格式:
ALTER SYSTEM SET FILESYSTEMIO_OPTIONS={SETALL|ASYNCH| DIRECTIO|NONE}SCOPE=SPFILE;

2、RAC环境下,Asynchronous IO受DISK_ASYNCH_IO参数控制,默认是TRUE,更改选项语句格式:
ALTER SYSTEM SET DISK_ASYNCH_IO={FALSE|TRUE} SCOPE=SPFILE;
Oracle建议您将此参数设置为其默认值。但是,如果asynchronous I/O性能不稳定,则可以将此参数设置为false,以禁用asynchronous I/O。如果您的平台不支持磁盘asynchronous I/O,则此参数不起作用。
五 参数配置建议
在linux下FILESYSTEMIO_OPTIONS参数配置建议:
filesystem_option参数,只有在9i,10G的时代,AIX、HP小机,使用祼设备的情况下设置filesystem_option为异步+直接I/O,10G开始,有了ASM,filesystem_option可以由Oracle自动配置,特别是11G及以上都是默认none,而对于文件系统,不建设设置为异步+直接I/O。
setall:存储I/O性能良好的情况下设置,可以大幅提升I/O总体性能,尤其是写性能,如果多套数据库公用一套存储则不建议设置此参数。使用场景除了小机和裸设备,文件系统如果要开启的话,需要具备两点:1、把文件系统的cache内存加到SGA上去,变向的保证缓存量,2、修改前操作系统磁盘性能指标正常不存在瓶颈。磁盘监控的主要iostat指标如下:
使用率(%util):是指磁盘 I/O 的百分比。过高的使用率(比如达到 80%及以上),通常意味着磁盘 I/O 存在性能瓶颈。
队列长度(aqu-sz):平均请求队列长度
IOPS(r/s+ w/s):是指每秒的 I/O 请求数。
吞吐量(rkB/s+wkB/s):是指每秒的 I/O 请求大小。
响应时间(r_await+w_await):是指 I/O 请求从发出到收到响应的间隔时间。
*对于aqu-sz,r/s+ w/s,rkB/s+wkB/s,r_await+w_await的几个指标,基线是每个环境都不一样的,如果要定基线找几个环境开始监控这些指标,作为正常时间段的基线。
注意:除了操作系统层面指标出现大幅异常,我们同样需要注意数据库层面的等待事件(db file sequential/scattered read,direct path read/write等),特别需要注意开启前后与I/O相关的等待响应时间是否发生大幅变化。
directIO:直接绕过缓存,使用directIO参数意味着Synchronous I/O需要等待其他请求完成后才能调用,对存储压力较大。且消耗CPU资源,不建议在生产上设置此参数。
asynch:异步IO可以提高性能,但是显而易见的是对磁盘处理IO能力有较高要求,否则提交的处理请求多,处理能力跟不上,根本无法达到提高性能的要求。(开启前请先检查磁盘IO处理能力,若磁盘性能已在临界值,开启后总体性能反而会有明显下降)
None:默认参数,由Oracle自身调节,有较好的综合表现。





