在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

什么是CBC latch和buffer pin

137次阅读
没有评论

共计 2092 个字符,预计需要花费 6 分钟才能阅读完成。

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

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”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计2092字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 日韩亚洲欧美综合一区二区三区 | 激情三级做爰在线观看激情 | 久久精品男人影院 | 国产美女在线精品免费观看 | 国产精品日韩欧美 | 作爱视频在线免费观看 | 一级毛片金瓶 | 免费观看国产短视频的方法 | 成人三级在线视频 | 国产永久视频 | 97视频精品全国免费观看 | 国产精品久久亚洲不卡4k岛国 | 韩国免费a级在线观看观 | 制服 丝袜 人妻 专区一本 | 国产精品嘿咻嘿咻在线播放 | 亚洲男人的天堂视频 | 亚洲国产精久久久久久久 | 亚洲欧美一区二区三区国产精品 | 久久久久日韩精品无 | 插吧插吧综合网 | 99久久免费国产精精品 | 国产成人影院一区二区三区 | 国产精品一区二区三区免费 | 资源站在线 | 一级做a爰片久久毛片鸭王 一级做a爰片久久免费 | 肥臀浪妇太爽了快点再快点 | 国产网红女主播精品视频 | 久久精品一区二区三区资源网 | 99久久一香蕉国产线看观看 | 亚洲精品无码久久久久秋霞 | 四虎www永久在线精品 | 国产成人精品午夜在线播放 | 亚洲国产第一区二区三区 | 日日摸夜夜添夜夜添影院视频 | 中文字幕免费播放 | 大陆熟妇丰满多毛xxxx | 久久久www成人免费无遮挡大片 | 99久久99 | 午夜成人理论无码电影在线播放 | 精品在线不卡 | 操操操网|