本文主要是介绍cache buffer chain,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
**CBC链上存的是buffer_cache中所有块的块头,CBC链的作用就是把buffer_cache中所有块的地址链起来
oracle会通过CBC链得知对应的块是否在内存中。
1、执行:select * from t1 where id=1 oracle通过计算得出这行数据在1号文件24号块中
2、oracle 通过计算知道这个块在2号chain上,去找,发现2号链上没有这个块
3、发生物理IO,把1号文件24号块调去如内存,并把buffer header挂到2号CBC链上,在内存中取出块中的对应数据返回给用户
4、这时我再执行:select * from t1 where id =2,oracle 通过计算得出这行数据在1号文件24号块中,并计算得出这个块应该在2号链上,遍历2号链上的buffer header找到有该块的头,根据头的信息,在内存中找到这个块,取数据返回给用户
buffer cache中有四个链
①CBC
②LRU(MRU) ---server process 干净和可用块
③LRUW ---dbwn 脏块(也有冷端热端)
④checkpoint queue ---按块第一次被脏的时间点串起来
这篇关于cache buffer chain的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!