您好,欢迎访问一九零五行业门户网

RAC之GRD和PCM lock简介

grd中记录pcm lock的信息,它位于每个实例的sga中,但每个实例都仅含部分grd、所有实例的grd汇总在一起才是一个完整的grd
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内存
其它类似信息

推荐信息