zoukankan      html  css  js  c++  java
  • Oracle buffer cache

    Buffer Cache

    timg

                       buffer cache 结构图

    HASH链

            ORACLE使用HASH算法,把buffer cache中每个buffer的buffer header串联起来,组成多条hash chain,一條hash chain由一個hash Bucket管理,hash bucket就是链的链头,从链头引出独立的双向链。一個hash buffer chains latch来保护多个hash chain

             1,每个buffer都有buffer header,buffer header指向具体的buffer

             2,hash链是双向链,串联的是buffer header

             3,先找到hash Bucket,然后扫描链上的buffer header,再定位到具体buffer

    LRU链(LRU LRU-W LRU-AUX)

           根据LRU(Least Recently User)算法,对buffer cache进行分配和换出(age out)管理

    在buffer header有一个控制结构叫TCH(touch count访问技术器),记录buffer被访问的次数,当达到某个阈值(_db_aging_hot_criteria决定),就标识为Hot块,

    注意不是每次被访问都计数,而是大约3s一次,X$BH表记录buffer相关的信息。另外,过段时间,oracle也会“冷却”Hot块,过段时间会让TCH计数递减。

    当我们需要分配一个buffer的时候,总是从LRU链冷端开始搜索,热块也可能处在冷端,扫描到标识为热块的就跳过。

    新数据写入buffer的时候,先去LRU链找到一个Clean的buffer,写入数据,然后重新挂到LRU链上,挂的位置由_db_percent_hot_default决定,默认50%,即LRU链接近中间的位置

    LRU list(replacement list)从该链查找可重用的buffer

    LRU-W list(write list)脏数据链,DBWR通过该链批量刷新到磁盘

    LRU-AUX list(LRU链的子链)LRU-w链写盘后首先挂到LRU-AUX链,分配的时候先找该链,找不到再去LRU链

    LRU-P list  这条链上的buffer 都存在一定的锁或者被其他会话PIN住

  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/guilingyang/p/5895273.html
Copyright © 2011-2022 走看看