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指内存中的一个单位)

CBC链表

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内核技术揭秘_吕海波中理解

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪灵骅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值