Buffer Cache

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住

最新文章

  1. 在Unity中创建可远程加载的.unity3d包
  2. 按钮打开链接,按钮click代码
  3. 使用U盘安装mint
  4. Highgui.imwrite("/data/pic1111.png", mat)失败,且找不到报错
  5. 应用程序缓存 AppCache
  6. linux 使用者管理
  7. C++使用之常量的定义
  8. Tomcat剖析(四):Tomcat默认连接器(2)
  9. 微信小程序评分功能
  10. Android的内存分配与回收
  11. Consul 介绍
  12. Python自然语言处理---信息提取
  13. JAVA基础部分复习(一、8中基础类型,以及String相关内容)
  14. Java生成HTML文件
  15. Linux 内存使用方法详细解析
  16. request.setAttribute()、session.setAttribute()和request.getParameter()的联系与区别(记录)
  17. mysql 赋给用户远程权限 grant all privileges on
  18. Android中的Handler介绍
  19. thinkpad t480s重装win10后小红点失灵 无法启用
  20. 洛谷 CF1043F Make It One 解题报告

热门文章

  1. Service
  2. HTK学习1:安装编译
  3. php过滤ascii控制字符
  4. 【GoLang】go 微服务框架 && Web框架学习资料
  5. Python中用format函数格式化字符串的用法
  6. mysql索引无效且sending data耗时巨大原因分析
  7. mount --bind 重启后失效的解决办法
  8. C++中Cstring、wstring 和string互相转换总结
  9. iOS 关于AFNetworking ssl 待完成
  10. WPS Office文档未保存怎么恢复