|
回复 #10 ccsnmoracle 的帖子
你好,
针对第一个问题:
3.3 发送的数据时,是带着修改内容发送的《发送的数据时,是带着修改内容发送的》是什莫意思???
回答:《发送的数据时,是带着修改内容发送的》这是说:Cache fusion的传送过程是跨事务边界的,也就是说不用等到实例3上面的事务完成,就可以发送这个PI数据块;
针对你的第二个问题:
2.实例2检查GRD,发现实例4拥有current version,向实例4发出通知;(如果实例4还没有COMMIT的情况下,current version还是在实例3 ??)
回答:事务commit只是会触发讲log buffer中的redo log写入磁盘中,此时实例4即使没有commit,但是讲数据块写入DISK的时候,同事在log中记录一条BWR,所以不用清空log buffer;
针对你的第三个问题:
我想简要介绍一点背景知识,我尽量简捷一些:
Oracle cluster发展历史分为两个阶段,最初是oracle 并行服务器(oracle parallel Server,OPS),第二阶段是从oracle 9i开始的oracle真正应用集群,就是我们说的RAC;
两个阶段中DLM(Distributed Lock Management)称呼是不一样的,OPS叫做PCM,RAC的叫做Cache fusion;
相应的:在DLM中把资源也分成了两类,在OPS时代叫做PCM Resource 和Non-PCM Resource ,在9i的RAC中还是沿用了这个叫法;在10g以后的RAC中就叫做Cache fusion 资源和
Non-Cache fusion 资源;
Cache fusion 资源包括:regular data block;index data block;segment header,undo block;
Non-Cache fusion 资源:data file;control file;data dictionary view;Library Cache;Row Cache等;
所以在RAC数据库中有4种lock:1.PCM LOCK 2.Non-PCM 3.Lock 4.Lock Latch;
而且非常重要的概念:GRD(Gloabl Resource Directory)
可以把GRD看作一个inner数据库,它记录这数据块在各node之间的分布情况,GRD位于每个节点的SGA中,但是每个实例SGA都是部分的GRD,所有节点的GRD合在一起才是真正完整的GRD;
RAC 会从各个节点中选择一个节点作为MASTER node,它来维护所有节点的GRD;
PCM的属性包涵:Mode;Role;PI
GRD的数据结构为:
DBA :Location: Mode: Role: scn: PI
说明如下:
DBA: data block address;
Mode:PCM的属性,有X,S,NULL三种值;
Role:有Local 和Global role;(具体用法和转换,我就不详细描述了,不过原理很重要),PCM的属性;
PI:PCM的属性,它代表中实例SGA中是否拥有和DISK内容不一致的版本,以及版本顺序,并不是代表每个节点是否修改过这个数据块,past Image能够加速Crash Recovery的恢复;
可以看到GRD包涵PCM的消息;
我们必须明白的是:Cache fusion是RAC的核心,它的服务由三架马车构成:GRD,GCS,GES
GCS:负责维护全局的SCN号;
GES:维护数据块的访问顺序,负责Lock的管理;
希望能够解答你的困惑。 |
|