首页 > 其他分享 >buffer cache实验5-latch:cache buffers chain

buffer cache实验5-latch:cache buffers chain

时间:2023-02-27 11:32:29浏览次数:36  
标签:CBC hash chain buffer cache BH -- latch


1.CBC latch产生的原理:

一次逻辑读时CBC latch锁及Buffer pin锁的获取和释放过程如下:


1.加Latch X


2.进入hash chain,在相应的BH上加Buffer pin S (0-->1)


3.释放Latch X


4.进行逻辑读--也就是通过BH中的buffer adderss找到数据块在内存中真实位置  ---假如读了1MS


5.加Latch X


6.释放Buffer pin S (1-->0)  0:没锁  1:共享锁  2:独占锁


7.释放Latch X


物理读时需要将数据块的buffer header挂载到hash chain上,也需要获取CBC LATCH,buffer header中有hash chain的信息,BH挂载到hash chain上,应该在BH内存结构中会有信息更改,BH的修改也就需要有Buffer pin了,锁的获取和释放应该和逻辑读时差不多,不过是在Buffer pin S 上要加2号独占锁。当然这一点是我大胆推测的哈哈。



CBC latch上一般都用的独占锁,使用共享锁的情况是:9I后在索引的根、枝叶读时使用共享CBC LATCH,无BUFFER PIN方式访问上


BH上Buffer pin锁状态:


0 未加锁


1 共享锁,读BUFFER BLOCK  ---SELECT


2 独占锁,写BUFFER BLOCK   ---DML语句



2.从CBC latch产生的原理可以发现,出现CBC LATCH争用会有以下情况:



1.CBC latch保护不同的链表、不同BH   :同一CBC LATCH下多个hash chain上的多个BH被同时访问时,


2.CBC latch保护同一链表下同一BH  :同一hash chain上同一BH被同时访问时


3.物理读将数据块挂载到hash chain上时,多个物理块HASH冲突都挂载到同一个hash chain或者要挂载的hash chain上的BH在被逻辑读


这里的被访问,可能发生在逻辑读或者物理读,即:使用到CBC latch的场景是:


服务器进程需要扫描hash chain上数据块--逻辑读


服务器进程需要将数据块挂载到hash chain上--物理读


关于hash chain与hash bucket,详见本系列第一篇:

​​点击打开链接​



3.关于CBC LATCH争用的模拟实验,有两种思路:

一是热链--这个不太好模拟,我也没做成功。


二是热块-这个好模拟,同时还会有buffer busy waits,具体实验见:

​​点击打开链接​



4.latch: cache buffers chains 解决思路:

1、热链:调整_db_block_hash_latches加大latch数量,作用是减少同一LATCH下多个桶被同时访问的情况。即多个表的相应块在BUFFER CACHE中对应不同BH,不同BH又对应在不同HASH BUCKETS,但是这多个HASH BUCKETS是属于同一个LATCH。。
alter system set "_db_block_hash_latches"=10240 scope=spfile;    
2、热块:调整BUFFER _CACHE,参数:db_cache_size,big integer 100M
热块是:同一表在BUFFER CACHE中的块(一个块对应一个BH,BH对应一个HASH BUCKET)被多个会话同时读,--全表扫描时容易出现。可以使用多个会话同时读取同一表的同一行的方式来模拟产生CBC latch,查询时使用ROWID做条件,查询速度快,更容易引起CBC latch。
3、修改应用,减少全表扫描,也就是优化SQL语句了

例如:CBC Latch的产生次数的查询:


SYS@ bys3>col name for a20


SYS@ bys3>select NAME,GETS ,MISSES ,SLEEPS ,IMMEDIATE_GETS, IMMEDIATE_MISSES from v$latch where name like '%cache buffers chains%';


NAME                       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES


-------------------- ---------- ---------- ---------- -------------- ----------------


cache buffers chains    2006932          0          0          78095                0



标签:CBC,hash,chain,buffer,cache,BH,--,latch
From: https://blog.51cto.com/u_1652968/6088130

相关文章

  • 联邦学习论文阅读笔记11 FGFL: A blockchain-based fair incentive governor for Fede
    面对的问题:激励分配不均、攻击者欺骗 方法:提出FGFL模型。1)设计了时间衰减SLM算法度量工作者声誉;2)设计了基于梯度相似度的轻量级方法度量工作者贡献;3)提出了一种公平的激......
  • return chain.filter(exchange); 这句啥意思
      答:继续往后执行过滤器,如果不调用这句代码,请求就不会发给控制器了,如果当前执行的过滤器后面还有过滤器,执行那个过滤器,如果没有,就执行控制器。 那我此时想一个请求......
  • MemoryCache 7.0 可用的获取所有Key的方法
    参考:.NETCoreMemoryCache缓存获取全部缓存键-stone8386-博客园(cnblogs.com)根据参考所述方法获取Key出错,提示_entries为null,后搜索无果,通过vs自带反编译查看Mem......
  • 4.9-Cache地址映射与变换方法
    主存与Cache地址映射概念主存数据如何迁至Cache才能实现快速查找2.常见三种映射方法全相联映射直接相连映射组相联映射全相联工作原理主存分块,Cache分......
  • 使用ccache对C++编译加速
    使用ccache对C++编译加速我们使用cmake作为C++的编译编排系统,当修改CMakeLists.txt文件之后,就会对配置文件进行更新,再去进行make的时候,缓存就失效了,需要重新编译,当项目很......
  • 本地缓存无冕之王Caffeine Cache
    本文已收录至Github,推荐阅读......
  • latch: row cache objects等待dc_rollback_segments的处理
    上午有客户遇到UNDO空间问题导致的latch:rowcacheobjects(dc_rollback_segments ),经排查为节点2的UNDO表空间使用率100%,大部分为UNEXPIRED状态的UNDO段。虽然UNDO表空......
  • java的StringBuilder与StringBuffer类源码详解
     java的StringBuilder与StringBuffer类源码详解类的定义abstractclassAbstractStringBuilderimplementsAppendable,CharSequence{char[]value;intcount;......
  • 基于tmpfs 的nginx cache 优化
    昨天简单说明了下基于tmpfs的nginxproxy_cache优化,今天整体说明下参考图  流程说明修改之前的对于nginx使用了多级处理,ingress(也是基于nignx,openresty),对于......
  • webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题
    webrtcQOS笔记二音频buffer数据不足生成很多gap的问题目录webrtcQOS笔记二音频buffer数据不足生成很多gap的问题记录个iusse.插入音频数据后,GetAudioInternal进......