Oracle I/O设置说明文档

来源:这里教程网 时间:2026-03-03 17:58:53 作者:

  前言

filesystemio_options  控制着操作系统io的设置。该参数只作用于文件系统。它有四个值可供设置,分别是:{none | setall | directIO | asynch }。该参数默认值受数据库版本和操作系统类型及操作系统版本影响。

从oracle 10G开始,对于ASM磁盘管理的情况,filesystem_option参数不作用于ASM磁盘管理的数据库。

 

 

 I/O 说明

说明

Synchronous   I/O 的机制下,若一个Oracle进程想调用一个I/O请求,那么必须等待其他请求完成后才能调用。例如,如果它发起对几个数据块的读取,那么进程就必须等待它把所有数据块都读取到内存之后,才能进行下一个动作。

说明

Asynchronous  I/O 的机制下,进程可以与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 liao 参数说明

disk_asynch_io 是相当于主开关,不管是文件系统还是裸设备,它都控制着异步io的开启与关闭,filesystemio_options是子开关,控制着文件系统上的异步io。如果数据库使用了文件系统, 那么I/O只受filesystemio_options控制。

的情况

RAC 环境下,direct I/O是默认开启的。并且在ASM磁盘管理下,I/O肯定是异步的,而且直接做的是direct I/O。所以,对于ASM磁盘管理,不用设置filesystemio_options,只要设置合理的SGA和PGA大小即可。(详情见mos:Document 751463.1)

单机的情况

在文件系统文件管理的情况下,那么异步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自身调节,有较好的综合表现。

 

 

  实验测试

测试结果:相同的测试环境下,none的整体性能优于其他三种。(由于采用的是虚拟化环境测试经过仅供参考)。具体测试结果如下:

测试工具:HammerDB

测试环境:centos7.4 + oracle11.2.0.4单机 虚拟化环境8核cpu、12GB内存

数据库内存配置:SGA 2.4G  PGA 798M

模型样本数据量:200g数据,5仓库,测试用户20

对照指标:TMP,为每分钟处理事务数。每分钟处理值越高代表数据库总体处理性能越好。

总结:在存储性能一般的情况下设置setall和Asynch数据库总体性能都会下降。

 

设置Setall TMP值:

 

设置directIO TMP值:  

设置Asynch TMP值:

设置None TMP值:

实验数据对照表

setall

directIO

Asynch

None

量化指标

Cpu 用户使用峰值

78%

50%

38%

36%

Utilization :Idle

Cpu 平均功耗排名

4

3

1

2

值越小代表平均功耗越高

内存(空闲内存)

5.3G ~4.3G

5G ~3.8G

4.8G ~1.2G

6G ~0.1G

Memory (K Bytes)

内存使用排名

4

2

3

1

值越小代表平均使用率越高

I/O 繁忙度

50% ~100%

72% ~100%

25% ~100%

80% ~100%

Iostat:vdc percent busy

I/O 读/写峰值(kb/s)

1100/5500

300/6200

220/4800

1200/5300

Iostat: vdc Writes/Reads Per Second

图1-1Cpu用户使用率监控图

图1-2内存监控图

 

图1-3 IO读写监控图

从图1-1 Cpu用户使用率监控图得出结论,设置成setall时,cpu平均使用率是最低的,那么说明此参数cpu消耗较小。ASYNCH消耗cpu最高,NONE第二,其次DIRECTIO。

从图1-2 分析,在压力测试期间内存占用最高的是NONE,第二是ASYNC,第三是DIRECTIO,最后是SETALL。

从图1-3 IO读写监控图分析得到结论,设置成setall时,每秒读平均流量明显高于参数设置成none和async时,由于实验环境I/O性能存在一定的瓶颈,I/0 繁忙度很容易达到100%。在生产发生问题时,同样表现为I/O读流量较高。如下图所示:

  总结

根据以上实验数据得出结论,FILESYSTEMIO_OPTIONS参数设置成SETALL后操作系统CPU和内存占用情况没有出现很大的异常,在I/O读方面有较大的变化。设置成SETALL慢是因为数据库出现了严重的I/O等待,导致数据库整体变慢。导致变慢的原因主要有两个:1、内存使用量少,说明cache到内存的数据少了,大部分压力直接落在了磁盘I/O上,这时候应适当调整SGA大小(原本Oracle发出的读取请求可以从OS缓冲区中得到满足,而一旦启用setall意味着开启了direct I/O,这时候应该增加数据库SGA大小,否则将导致磁盘读取需要更多的时间才能完成);2、存储I/O瓶颈,无法提供更高的I/O吞吐量,大量的阻塞会话来不及处理,导致数据库系统整体变慢。所以一定要在存储性能良好的情况下设置SETALL参数。

下图是生产故障时awr报告的等待事件部分,总体I/O等待占据了整个DB time的68.1%,且平均I/0 等待达到了3ms,正常情况下,平均I/0等待在应在1ms以下。直接路径读等待事件的平均I/O延迟更是达到了7ms,占据了整个DBtime的19.9%。显然当时数据库总体性能已经出现了严重的问题,由于相关I/O等待事件的大量堵塞,导致数据库响应速度整体变慢。

图1-4 故障时间I/O等待

图1-4 正常运行时I/O等待

 

  论证调整调大SGA 后性能变化

测试工具:HammerDB

测试环境:centos7.4 + oracle11.2.0.4单机 虚拟化环境8核cpu、12GB内存

数据库内存配置:SGA 4.8G  PGA 798M

模型样本数据量:200g数据,5仓库,测试用户20

参数设置filesystem_option设置为SETALL

SGA 设置4.8G TMP值:

SGA 设置2.4G TMP值:

 

SGA 设置4.8G 每秒读写值:

SGA 设置2.4G 每秒读写值:

根据以上实验数据得出结论,FILESYSTEMIO_OPTIONS参数设置成SETALL情况下,调大数据库SGA,数据库总体性能有所改善,且磁盘每秒读平均在200k/s以下。总体TPM有所提升,且每秒读压力有所降低。

相关推荐