buffer cache 内存组织结构 存在多种链(左边是链 右边是buffer(大小相同))
链(chain)
CBC :cache buffer chain 以地址的方式将各种buffer连接起来
根据block地址找block的时候,需要使用到CBC chain
怎么实现链的:在每个块上面写上不同地址
查询一个sql的时候,
先查找这条数据存在具体的哪一个块上面(dbf文件),
由此判断存在buffercache的那一条链上面。
然后遍历。如果buffer中没有响应的内存块,则发生物理IO
一个数据块的头部包含了地址和类型
发生物理IO的时候
1、把块的头部(地址、类型)挂载到buffercache的链上
2、并且在链上写一个地址指向buffercache的具体的内存块地址
LRU:最近最少使用(需要将磁盘的block调入内存的时候): 找可用块
buffer的状态
free
clean
dirty
LRUW:dbwr写的时候。 dirty最近最少
CBC:根据CBC查找buffer
检查点队列 :1、dirty块 2、按照块第一次dirty的时间点
如果update一个语句
修改buffer后 ,buffer变成dirty
最后会被挂载到 LRUW和检查点队列
非clean块挂载到LRU