RAC之GRD和PCM lock简介


GRD中记录PCM lock的信息
它位于每个实例的SGA中
但每个实例都仅含部分GRD、所有实例的GRD汇总在一起才是一个完整的GRD

PCM lock有3个主要属性:Mode、Role、PI

① Mode
--S
--X
--NULL
对于S,X两种锁模式这里不再赘述
而NULL代表对应的内存空间可以被重用、在没有被重用之前、实例是不能访问这里的数据

② Role
Role这个属性是用来描述“脏块”在集群间的分布状况
注意,“脏”只是用来描述数据块的内存版本和磁盘版本是否一致、和事务没有关系
Role有两个取值:Local和Global
⑴ 对于Local Role、Mode只会是S或X:

Ⅰ 如果Mode是S,则该数据块内存版本和磁盘版本一致
Ⅱ 如果Mode是X, 则该数据块内存版本和磁盘版本不同
当拥有Local Role和X Mode的实例给其他实例发送数据块:
Ⅰ 如果接收方收到的也是和磁盘一致的版本的,那么本实例(发送方)仍然保持Local Role
Ⅱ 如果接收方收到的和磁盘版本不一致,那么发送方和接收方的角色就要转换成Global


⑵ 对于Global Role、Mode可以是S、X、或NULL

Global Role意味着一个“脏块”同时被多个实例拥有
如果想要把这个“脏块”flush到磁盘,必须要联系GRD,让拥有该块Current版本的实例完成写动作
但对于拥有Local Role的实例而言,如果要把“脏块”flush到磁盘,不需要联系GRD,由本实例完成即可

③ Past Image

下面通过例子说明什么是Past Image
假设一个2节点的RAC集群,块_A在磁盘上的SCN=1
1)node1要修改块_A,从磁盘读入SGA进行修改,修改后块_A在内存中的SCN=2
2)node2也要修改块_A,node1就会通过cache fusion把块_A传送给node2,传的是SCN=2的版本,
即Current copy的数据块,这时node1还是会保留这个SCN=2的块在SGA中,但是不能再进行任何修改
这时node1拥有的这个Image就叫做“Past Image”
在node1发送Current copy之前,会先把相应的redo entry flush到redo log
3)node2修改这个数据块,修改后SCN=3,但磁盘的版本仍然是SCN=1
4)如果node1发生检查点事件,因为node1上块_A是“脏块”,所以块_A必须被同步到磁盘
5)node1会联系GRD,发现node2拥有块_A的Current版本,GRD会通知node2把这个块写入磁盘
6)node2完成写之后,会通知所有拥有PI版本的实例释放他们所拥有的PI内存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值