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