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住

  • 相关阅读:
    75.Java异常处理机制-自定义异常
    75.Java异常处理机制-手动抛出异常
    75.Java异常处理机制throws
    mybatis的xml文件中如何处理大小于号
    JS 拼装代码的HTML onClick方法传递字符串
    Java 日期往后推迟n天
    MySql 去重且指定某字段在前的排序方法
    java运行内存分配图(转)
    Java中正则Matcher类的matches()、lookAt()和find()的区别<转>
    图片在父元素中上下居中(vertical-align的有效性)
  • 原文地址:https://www.cnblogs.com/guilingyang/p/5895273.html
Copyright © 2011-2022 走看看