• 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住

  • 相关阅读:
    走了
    地表最简单安装MySQL及配置的方法,没有之一
    周总结
    Codeforces 1323 div2题解ABC
    Code force-CodeCraft-20 (Div. 2) D. Nash Matrix 详解(DFS构造)
    LeetCode 1293. Shortest Path in a Grid with Obstacles Elimination
    LeetCode 1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    LeetCode 1291. Sequential Digits
    LeetCode 1290. Convert Binary Number in a Linked List to Integer
    LeetCode 91. Decode Ways
  • 原文地址:https://www.cnblogs.com/guilingyang/p/5895273.html
Copyright © 2020-2023  润新知