大多数文件系统io被os缓冲到其文件系统缓冲缓存中。当进程访问的数据在缓存中时,数据会立刻返回而不需物理io
,反之需要进行一次物理io。
文件系统缓冲缓存也用在写操作中。当进程写数据时,更改的缓冲将进入缓存,如果进程显示请求同步完成写,
此时数据会立刻写入并且用户等待操作完成。默认情况下,将使用延迟写。数据仅仅被拷贝到缓冲缓存,OS有一个后
台任务周期性刷新延迟写缓冲到磁盘,以优化性能。
但是如果某些延迟写未完成,系统失败将导致延迟写的丢失。
因此Oracle不是用它们,Oracle对所有的写缓冲IO进行同步完成,这是通过在打开数据库文件时设置O_DSYNC完
成的。这意味着数据本身是同步写入的,但是更新文件访问和更改的时间还是可能使用延迟写,因为这是OS记录的。
延迟写与异步写是不同的,虽然用户进程不会等待任何一种写完成。但是延迟写会导致数据丢失,而异步写不会。
虽然Oracle本身不使用延迟写,Oracle显示打开所有数据库文件进行同步写完成。但是如果基于IO的文件系统,Oracle仍将使用延迟写聚集。在像HP-UX and AIX的系统上,可以调整某些内核参数限制每个进程可以挂起的延迟写数量。这可以减少风险,但是无法完全消除。在裸数据库,则没有此风险。
阅读(1265) | 评论(0) | 转发(0) |