千家信息网

什么是CBC latch和buffer pin

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本篇内容介绍了"什么是CBC latch和buffer pin"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2025年11月09日什么是CBC latch和buffer pin

本篇内容介绍了"什么是CBC latch和buffer pin"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

CBC 全称cache buffer chain 。要了解CBClatch和buffer pin之前,首先我们要了解的是当一个进程想要查询或者修改数据时,oracle都做了一些什么工作。

当一外部服务向数据库申请数据的时候,oracle内部进程首先在buffer cache中寻找相关数据,如果buffer cache中没有相关数据时,就要从相对应的数据文件中找到相对的block,随后发生物理IO,将其写入buffer cache中的cache中。这时候,就会出现一个新的问题?buffer cache中有那么多buffer,oracle怎么才能准确的找到自己需要buffer呢?

hash算法中有个重要的概念 bucket,例如oracle想要读取1号文件第23块数据的时候,它将根据文件号和块号计算出hash值为x,然后根据hash值x直接定位到bucketx,然后oracle便可以读取该bucket的内容。为了避免hash冲突,这个bucket后面一定是一个链表,所以在bucket中存在的一定是cbc链表头。当进程根据文件号和块号找到bucketx后,进行遍历,在每个bh中寻到ba,然后就可以准确的找到相对的buffer了。

了解以上的知识后,当一个进程访问buffer时,由于sga是公共内存,所以一定要有锁机制对sga进行保护。上述进程对BH,Bucket访问时,就会有相对应的锁进行保护,这个latch就是CBC latch。当甲进程找到了bucketx后,甲进程必须申请latch,才可以获得对于BH的访问权。由于latch也是占用空间的,所以每个latch管理多个bucket,并不是简单的1对1的关系。

当甲进程获得了这个latch之后,它就可以对BH进行访问或者修改,当对BH进行修改时,此时会在BH中加上一道buffer pin的锁。buffer pin 常用的状态有两种:共享S和独占X,简单来说,当你进行逻辑读时状态便是S,进行DML操作时,便是X状态。当无人访问的时候,buffer pin 默认的状态是0,当该状态被修改时,CBC latch的使命便达成了。甲进程这个时候就可以释放掉该CBC latch,转而由 buffer pin锁陪同进行下一步的操作。当甲进程对buffer操作完成之后,在释放该buffer pin时,这个时候CBC latch会陪同甲进程走完最后的行程。

我们要了解CBC latch的两种模式,一种独占模式一种共享模式。因为CBC latch保护的是BH和链表。如果没有对相关的BH和链表进行修改,便可以以共享模式申请CBC latch。如果对BH中的buffer pin状态进行修改的话,便会使用独占模式。在修改好相关状态时,便会将CBC latch释放

以上都是基于CBC latch处于独占模式,但是当乙进程也要访问该latch负责的bucket时,便会进行排队。这样就会造成大量的竞争。

当CBC latch处于共享模式的时候,该latch便会一直陪甲进程直到释放buffer pin后,自己才会释放。这样便是增加了latch加载时间来解决大量竞争的问题。

对于buffer pin来说。我们都知道读会获得共享的bufferpin 锁,写会获得独占的buffer pin 锁。对于buffer pin锁的阻塞来说。只要有独占锁的时候,便会出现堵塞。

例如

写写:甲进程获得了独占buffer pin锁,乙进程此时也想进行写操作,这时候只能等待甲进程释放

写读:甲进程获得了独占buffer pin锁,乙进程此时想进行读操作,这时候需要等待甲进程释放锁

先讨论一下共享状态下的BH:

甲进程在CBClatch的陪同下,将BH中的buffer pin状态修改成了S状态。此时乙进程也在latch的陪同下,也想访问该BH,但是发现它的状态是S共享。乙进程会在该BH中留下一个S状态的buffer pin

,在该buffer pin状态下,将buffer复制到另一个buffer中,同时生成一个新的BH指向该buffer,完成后释放CBC latch。此时buffer中多出来一个相同的buffer,但是原buffer的BH中会多出一个status=XCUR列。克隆出的BH status是没有值的。此时乙进程再次获得latch,将原BH的status改为CR,也就是CR块;新克隆的status便为 XCUR,将buffer pin设置为X独占,开始修改buffer。所以这就是读不会堵塞写的原因。

如果此时又有一个丙进程想要读该buffer,但是buffer pin是状态是x,所以丙进程只能等待,也就是常见的buffer busy waits。

"什么是CBC latch和buffer pin"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

进程 状态 数据 时候 模式 文件 内容 得了 知识 保护 也就是 就是 更多 问题 同下 竞争 相同 重要 学有所成 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全的风险分析与控制 vps web 服务器 芜湖软件开发培训怎么选 rust怎么开服务器 网络安全法 计入信用档案 开发软件要多大的服务器 安徽服务器虚拟化价格 同花顺数据库理想论坛 红原天气预报软件开发 车站管理系统数据库脚本 我的世界单人模式内置服务器 网络安全性相关 南京科远数据库管理器密码 热血传奇开放服务器 少字的网络安全手抄报 二级专科医院服务器 数据库sql的控件怎么使用 旷冶深圳软件开发 网络安全问题日益重要英文 舟山高清视频系统服务器 网络安全 进阶笔记 大学生网络安全新闻稿 印度将执行新的网络安全政策 支付宝香港网络技术有限公司 9月1日实施网络安全的新法规 烟台丛聚网络技术有限公司培训 软件开发工程师和程序员的区别 米尺网络技术最新视频 贵州销售软件开发排行榜 防沉迷网络安全用网心得体会
0