首页 > 数据库 > Oracle > oracle逻辑读过程
一个CBC latch管理多个bucket,根据hash找到bucket,不存在遍历完这个CBC latch的BH去下个CBC latch的现象
Buffer cache中hash bucket的数量由_db_block_hash_buckets参数设置。
1.根据要访问的文件号、块号,算出hash值
2.根据hash值找到hash bucket
3.根据每个hash bucket独有的一个 指向CBC链表(cache buffers cache chains list)的链表头(我愿称之为指针),找到对应的CBC链表
4.CBC链表就是一堆hash值相同的BH(buffer header)组成的,搜索CBC链表=遍历一个个BH
5.找到目标BH,提取其中的BA(buffer address),BA记录块在buffer cache中的地址
6.根据BA访问buffer(此处buffer指内存中的一个单位)
1.CBC链表是双向链表,互相指向,a互相b b互相a和c,等等,同个列表中的BH的hash值是一样的。
2.每个bucket都有一个CBC链表
3.每个BH大小相同
4.逐个比对BH中的文件号、块号,直到找到目标BH

1.根据要访问的文件号、块号,算出hash值
2.根据hash值找到hash bucket
3.根据每个hash bucket独有的一个 指向CBC链表(cache buffers cache chains list)的链表头(我愿称之为指针),找到对应的CBC链表
4.从CBC链表的链表头——CBC链表,中间的CBC latch锁设成X模式(独占锁)
5.CBC链表就是一堆hash值相同的BH(buffer header)组成的,搜索CBC链表=遍历一个个BH
6.在CBC latch锁的独占保护下,找到想要的BH,此BH中的buffer pin锁从0转变为S(共享锁)
7.buffer pin锁修改完成,释放独占的CBC latch锁。
8.提取其中的BA(buffer address),BA记录着块在buffer cache中的地址
9.根据BA读取buffer中的数据(此处buffer指内存中的一个单位)
10.读完buffer数据后,buffer pin锁改为0

本文从Oracle内核技术揭秘_吕海波中理解
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980685/viewspace-3001674/ ,如需转载,请注明出处,否则将追究法律责任。