cache buffers chains latch

本文探讨了Oracle数据库中cachebufferschainslatch的工作原理及其在读取和写入过程中的作用。介绍了从Oracle8i开始引入的散列锁存器到Hashchain之间的关联,并详细解释了共享模式下锁存器如何帮助减少争用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cache buffers chains latch


从 Oracle 8i Database 开始, 散列锁存器<-------(1:m)------>hash bucket<-------------(1:1)---------->hash chain


1.每个逻辑读取需要一个latch get操作个一个CPU




2.从latch get 例程中获得的唯一方法是获取锁存器




3.在任意一个时刻,只有一个进程可以拥有cache buffers链,并且这个锁存器覆盖许多数据库,另一个进程可能需要其中一些数据块。


      为了使用高速缓冲区,要查询或修改Hash chain的进程必须获取管理响应Chain的Cache buffers chains latch.


因为一个Cache buffers chains latch保护多个Hash Bucket。从Oracle 9i起,以只读为目的的查询Chain时,可以将cache buffers chains latch


以Shared 模式共享,因此有助于减少争用。

对于Shared 模式的cache buffers chains latch 有几个注意点:


若能共享cache buffers chains latch,理论上不应该发生同时执行Select 操作引起cache buffers chains latch 争用。


但是实际测试结果,同时执行Select操作依然会发生锁存器争用。


其理由是与buffer lock相关。若为了读取工作,以Shared 模式已获得latch时,读取实际缓冲区过程中需要以Shared模式获取buffer lock,


在此过程中需要部分修改缓冲区信息。因此在获取buffer lock过程中,需要将锁存器修改为Exclusive模式,在释放buffer lock期间也需要Exclusive模式


获取锁存器。在此过程中因为发生了争用,所以要等待latch:cache buffers chains事件。

转载于:https://www.cnblogs.com/zhaoyangjian724/p/3797853.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值