Oracle RAC CacheFusion系列十六:Oracle RAC CurrentBlock服务器

  

PCM锁资源存储方式有两种,1。如果PCM锁属于本地实例,那么它会被存储在本地实例的LE结构中。2。如果PCM锁属于远程实例那么它将会被分配存储在本地实例的共享池中。

  

kclle结构:

  

,,kcllerls表示释放;,

  

,,kcllelnm表示,名字(id1, id2);

  

,,kcllemode表示,保持状态;

  

,,kclleacq表示,收购;

  

,,kcllelck表示DLM锁。

  

kjbr结构:

  

,,resname_kjbr[2]表示资源名称,,

  

,grant_q_kjbr才能表示格兰特队列;

  

,,convert_q_kjbr表示转换队列;,

  

,,mode_role_kjbr,它表示授权模式和角色:零(0 x00), S (0 x01) X (0 x02), 10本地(0 x00), G0全局没有π(0 (),G1全局有π(0 x018)。

  

kjbl中的字段mode_role_kjbl是表示锁定模式:

  

,,0 x00表示为零模式,

  

,,0 x01表示为S模式

  

,,0 x02表示为X,,

  

,,0 x04表示为大师节点打开锁;,

  

,,(表示为全局角色;

  

,,0 x10表示为存在π;

  

,,0 x20表示为CR请求;

  

,,0 x40表示为S模式请求;,

  

,,0 x80表示为X模式请求。

  

     

  

  <强>,示例,,

     <>以前SELECT  *,得到emp  WHERE  empno =,……;   UPDATE  emp  SET  sal =, sal  +, 10, WHERE  empno =,……;,提交;,ALTER  SYSTEM  CHECKPOINT 地方;1   

,,1 .锁定和块请求,远程大师

  

,,2 .锁定和块请求,本地主人,共享模式

  

,,3 .锁转换,锁降级

  

,,4 .块融合,写/写

  

,,5 .块融合,写/读(CR)

  

,,6 .写入涉及锁定,丢弃π

  

,,7 .块融合写/读类似于步骤5

  

  

     

  <强>步骤1,,

  

最开始表未被缓存在集群中的任何实例中,因此大师将SL0模式授予实例3。然后,实例3将块从磁盘读取到其缓冲区高速缓存。查看x美元kjbr和x美元kjbl已创建的资源以及已获取的本地锁定.STATE为2表示,内存块处于共享模式scur。

  

  

  

  

     

  <强>步骤2,,

  

主节点将SL0模式授予实例2,因为:

  
      <李>   

    资源上有一个共享锁(由实例3拥有)。

      <李>   

    主节点上的同一资源没有共享锁。

  

然后,实例2将块从磁盘读取到本地缓存中。如果主节点上存在共享锁或_cr_grant_local_role为真(11 g为汽车),则行为会存在变化。在这种情况下,掌握实例将CR请求转发给共享锁的实例所有者(实例3),将当前缓冲区发送到实例2 .

  

  

     

  <强>步骤3,,

  

请求者(实例2)向主(自身)发送X请求。

  

主(实例2)将萍X消息发送到年代锁持有者(实例3)。

  

实例3将缓冲区状态从scur转换为CR并关闭锁定只

  

实例3将缓冲区发送给请求者(实例2)。

  

请求者(实例2)将承担发送给主(自身),以获得锁定模式,并通知主前一个持有者(实例3)已关闭锁定。

  

X美元BH。状态显示1,即当前块(X)。

  

X美元KJBR.KJBRROLE显示0,表示实例2拥有的锁是XL0,这意味着实例3拥有的锁已关闭。

  

X美元BH.STATE从2变为3(即变为CR)只

  

  

     

  <强>步骤4,,

  

请求者实例1执行更新向主实例(实例2)发送X请求部分实例(实例2)将萍X发送到X锁定持有者(自身)。实例2将缓冲区状态从本地X当前转换为π。实例2将缓冲区块发送给请求者(实例1)。

  

请求者(实例1)向主(实例2)发送假设以获取锁定模式,并告知主实例实例1具有全局X锁定,而实例2具有全局零锁定。

  

X美元BH.STATE从X切换到π模式。

  

KJBL。KJBLROLE值24为8 + 16,分别表示π和全球(即G1模式)。

  

X BH.STATE美元是1,这是当前独占的。

  

  

     

  <强>步骤5,,

  

实例3(请求者)将CRREQ (S)发送到主(实例2)。

  

主实例(实例2)选择CR,如下所示:

  
      <李>   

    如果资源角色为G0,则主实例采用存在于它自身缓冲区缓存上的最高版本的π

  
      <李>   

    否则,如果资源角色为G1,则主实例选择接近CRREQ中请求的视交叉上核的视交叉上核的π。

  
      <李>   

    如果资源角色为XL0,则主实例选择实例当前的缓存。

  

Oracle RAC CacheFusion系列十六:Oracle RAC CurrentBlock服务器