RAC Cache Fusion 内存融合详解

1.内存融合相关概念

 在RAC环境中,实现多节点对数据的并发访问和修改的⼀种机制。

 Cache Fusion的要点
1、⾼速私有⽹络
2、共享存储
3、节点间的访问机制  --通过这三个特点实现了内存融合

 

如果多个节点对数据块进行修改,很难保证谁修改的是最新的,那么oracle通过scn,来通过scn保证数据的不同版本,scn被引入到了内存融合当中,那么多个节点在访问的时候,看起来多个节点是同时访问的,但是由于scn是单向递增的,因此在数据库层面,对于数据的修改永远都是串行的,因为scn号不可能重复。scn能对用户的并发请求能够在oracle内部通过串行方式来实现。

 

rac还引入了global resource dictionary全局资源目录,把所有的需要访问的数据作为资源来进行控制,并且引入了相关的进程来控制这些资源的访问。

 

 

CACHE FUSION的相关概念
资源
在rac当中资源主要分为两类,一类为GCS一类为GES。

GCS资源:数据库中的块
GES资源:数据排队信息等资源
RAC中的数据块和队列相关信息,都作为资源,能够全局共享并在节点之间传递,通过记录资源在各
个节点的使⽤情况和锁的信息保持⼀致,从⽽保证多节点的并发访问都能够在内存中完成。
 

全局资源⽬录:

将所有资源的使用情况和当前的状态信息全部都需要统计起来,要让所有的节点都可以访问到。

RAC中的数据块和队列相关信息,都作为资源,能够全局共享并在节点之间传递,通过记录资源在各

个节点的使⽤情况和锁的信息保持⼀致,从⽽保证多节点的并发访问都能够在内存中完成。
 

资源主节点

由于资源可能出现在多个节点里面,一个数据库里面有多个节点,资源可能在每一个节点都出现,但是不能将资源相关的使用信息和锁的信息在每一个节点都存放,这样会导致资源的浪费并且还不能保持一致性。一般资源的信息只存放在一个节点之上,对于某一个具体的资源存放它的使用信息,锁信息,状态信息的这个节点称为资源主节点。

保存资源的定义及相关的锁信息的节点
 

 RAC 内存锁:

rac资源要被多个客户端,多个实例同时的进行并发的访问,这就需要串行化的机制来保证资源的一致性,因此在RAC提出了两种锁

PCM锁:保护GCS资源
Non-PCM锁:保护GES资源

 

CACHE FUSION的相关概念
RAC资源访问的⼀般过程:

首先涉及到三个节点,一个节点是资源的主节点,要存放资源的访问信息以及锁的信息。

另外一个节点是资源持有节点,即当前资源被谁占用着。

最后一个节点是资源持有节点,现在发出请求的这个节点是资源的申请节点。
1、资源申请节点发送请求到资源主节点
2、资源主节点将对应的请求发送给资源持有节点
3、资源持有节点将持有资源的相应的锁资源进⾏改变,并将数据返回给资源申请节点
4、资源申请节点告知资源主节点,资源主节点修改资源的相关信息,因为申请资源的节点现在变为资源持有的节点了。
消息机制

RAC资源的访问过程: PCM资源

 PCM锁三要素:模式、⻆⾊、旧镜像
式: PCM锁有三种模式, N(空)、 S(共享)、 X(独占)

⻆⾊:对应数据块被修改的范围, L(本地):对应的块只在本地被修改过; G(全局):对应的块在⼀个或者多个远程实例中被修改过。
旧镜像: 0表示对应的块不存在PI, 1代表存在。只对⻆⾊为G的数据块有效。 (对于一个全局的块来说,如果在其他节点也修改过,那就存在一个past image旧镜像,如果一个数据块在本地修改过,那么就不存在past image,旧镜像只对角色为global角色生效)

RAC资源的访问过程: PCM资源
 场景: 4个节点的RAC数据库,资源主节点为D节点资源主节点存放着资源的使用信息以及访问请求等相关的信息和锁的模式
1、节点C要求读取⼀个数据块(SCN为1000)

c节点要读取数据块要向d节点发出请求,因为是读取,需要的是share的锁,主节点d查看了当前资源分布和使用的情况,发现该资源并没有被其他节点所占用,通过第二步获取到了s锁,之后去磁盘里面读取数据,第四步读取完成获得了相应的锁,因为该数据块获得的锁是pcm里面的s锁,并且只在本地被修改过,同时不存在旧镜像,所以该数据块对应于PCM锁里面的模式是SL0。

 

2、节点B 要求读取该数据块

首先节点b也先向主节点发送请求,要读取的数据块和相应的锁,然后d节点去查看了当前资源的一个信息之后发现b节点要访问的资源被c节点持有,c节点以share的方式持有,b节点只是读取数据块,而不是修改数据块,所以b节点请求模式也是share的模式,根据上面表可以看出申请者的模式和持有者的模式是兼容的,那么节点c就直接把b节点请求的数据块给节点b,节点d会将share模式的s锁分配给节点b,最后节点b获取到资源之后会通知节点d让d重新修改资源的分布和使用情况。

b节点是以share的模式去读取数据块所以模式是s,b要读取的数据块在其他节点也没有被修改过,也是本地的没有被全局修改过。b要访问的数据块没有旧镜像,所以b节点的属性也是SL0。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值