cache buffers chains latch

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