博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle buffer cache
阅读量:5967 次
发布时间:2019-06-19

本文共 1015 字,大约阅读时间需要 3 分钟。

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住

转载于:https://www.cnblogs.com/guilingyang/p/5895273.html

你可能感兴趣的文章
Vertically aligning HTML
查看>>
Linux之cut命令
查看>>
jedis 用连接池时超时返回值类型错误
查看>>
nginx 查看每秒有多少访问量
查看>>
python正则表达式
查看>>
安装nagios中php安装报错 configure error xml2-config not foud
查看>>
php邮件发送类
查看>>
Python算法题----在列表中找到和为s的两个数字
查看>>
Gson解析Json
查看>>
Spring Cloud with Turbine
查看>>
关于Java浮点数运算精度丢失问题
查看>>
各种主流 SQLServer 迁移到 MySQL 工具对比
查看>>
路由访问控制列表的设计
查看>>
使用firefox44版本,弃用chrome
查看>>
《深入理解Java虚拟机》(二)java虚拟机运行时数据区
查看>>
MySQL for Java的SQL注入测试
查看>>
MySQL服务器意外关机-无法启动多实例
查看>>
golang实现人民币小写转大写
查看>>
分布式日志平台--ELKStack实践
查看>>
互联网思维
查看>>