Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1201267
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2007-12-24 22:14:48

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