ITPub博客

首页 > 数据库 > Oracle > LRU 和distry list

LRU 和distry list

原创 Oracle 作者:shenmingmingDBA 时间:2015-05-18 11:47:47 0 删除 编辑

buffer cache的原理:

这个原理至关重要.


当一个Server进程需要读取数据到buffer cache中时:


1).首先要判断该数据是否存在于buffer中,如果存在,且可用.则获取数据,再根据LRU算法在LRU列表上移动该block;

2).如果数据不存在于buffer中,Server进程就要扫描lru列表,查找可用的buffer空间(free buffer)以放数据到buffer中,

在扫描lru list的过程中,如果碰到已经被修改过的buffer,就将它移动到dirty list(checkpoint queue)上(由于增量检查点的引入,DBWR进程也会主动扫描一定比例的LRU list,将发现的脏数据块移动到dirty lis);

如果dirty list(checkpoint queue)达到了阈值,Server进程就会通知DBWn进程写出脏数据到数据文件(DBWR进程写的一个触发条件);

如果Server进程扫描lru列表到一个阈值还没有找到足够的free buffer,这时,就停止对lru的扫描转而通知DBWR写出脏数据,释放内存空间;这时,进程处于free buffer wait等待.

3).找到足够的buffer之后,Server进程就可以将数据从数据文件读入到buffer cache中;


4).如果读取的block不满足"一致性"需求,则Server进程就需要通过当前block的版本从回滚段中读取该block的"一致性"镜像返回给用户(consistent gets).


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30166976/viewspace-1660136/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 检查点CKPT
请登录后发表评论 登录
全部评论

注册时间:2015-03-17

  • 博文量
    56
  • 访问量
    147923