cache fusion  .   grd  .  drm   .   gcs  .   ges





cache fusion 

1.RAC是一个数据库执行在多个实例上。通过DLM(Distributed Lock Management):分布式锁管理器 来解决并发问题。RAC各个节点间的共享资源,为了保证每一个节点訪问数据的一致性。所以须要使用DLM来协调各个实例间的资源竞争訪问。 这个DLM在RAC中就叫Cache Fusion.





2.在cache Fusion 中,每一个数据块都被映射成Cache Fusion资源。该资源实际上就是一个数据结构,资源的名称就是数据块地址,数据块请求过程:先将数据块地址X转换成Cache Fusion资源名称,然后把这个cache fusion 资源请求提交给DLM,DLM进行Global Lock 的申请。释放活动,仅仅要进程获得了PCM Lock才干继续下一步,即:实例须要获得数据块的使用权。

(先将地址转换成cache fusion资源---->把该资源提交给DLM---->获得该资源的使用权)





GRD

1.GRD(Global Resource Directory) 能够看做是一个内部数据库,记录每一个数据块在集群间的分布图,位于每一个实例SGA中。每一个实例SGA中的GRD汇成了一个完整的GRD。在RAC的master node上记录了该资源在全部节点上的使用信息。而每一个节点的使用信息记录在本节点上。





DRM

1.DRM(Dynamic Resource Management),当一个非MASTER节点的资源被频繁訪问时,通过DRM就可将该节点提升为master节点,将节点remaster成master节点。

2.通过使用DRM造成的问题:

实验。。。。。





GCS

1.GCS(Global cache service)全局缓存服务:要和cache fusion结合在一起来理解。

全局缓存要设计到数据块。

全局缓存服务负责维护全局缓存存储区内的缓存一致性,确保一个实例在不论什么时刻要改动一个数据块时,都可获得一个全局锁资源,从而避免还有一个实例同一时候改动该块的可能性。进行改动的实例将拥有块的当前版本号(包含已提交的和未提交的事务)以及块的前像(post image)。

假设还有一个实例也请求该块,那么全局缓存服务要负责跟踪拥有该块的实例、拥有块的版本号是什么,以及块处于何种模式。LMS进程是全局缓存服务的关键组成部分。

2.LMSn(LOCK MANAGER SERCIVE) 负责数据块在实例间的传递,通过參数GCS_SERCER_PROCESSES来控制,缺省值是2个。取值范围为0-20.





GES

1.GES(Global enqueue service)全局队列服务:主要负责维护字典缓存和库缓存内的一致性。字典缓存是实例的SGA内所存储的对数据字典信息的缓存,用于快速訪问。因为该字典信息存储在内存中,因而在某个节点上对字典进行的改动(如DDL)必须马上被传播至全部节点上的字典缓存。GES负责处理上述情况,并消除实例间出现的差异。处于相同的原因,为了分析影响这些对象的SQL语句,数据库内对象上的库缓存锁会被去掉。这些锁必须在实例间进行维护,而全局队列服务必须确保请求訪问相同对象的多个实例间不会出现死锁。LMON、LCK和LMD进程联合工作来实现全局队列服务的功能。GES是除了数据块本身的维护和管理(由GCS完毕)之外。在RAC环境中调节节点间其它资源的重要服务。

2.LMON

各个实例的LMON进程定期通信。以检查集群中各个节点的健康状态。当某个节点出现问题时,负责集群重构。GRD恢复等操作,它提供的服务叫做:Cluster Group Services(CGS)。

LMON 主要借助两种心跳机制来完毕健康检查:

1-节点间的网络心跳(Network Heartbeat):能够想象成节点定时发送ping包检查节点状态,假设能在规定时间内收到回应,就觉得状态正常。

2-通过控制文件的磁盘心跳(Controlfile Heartbeat);每一个节点的CKPT进程每隔3秒更新一次控制文件一个数据块,这个数据块叫做Checkpoint Progress Record,控制文件是共享的,所以实例间能够相互检查对方是否及时更新来推断。





3.LCK

这个进程负责Non-cache fusion资源的同步訪问。每一个实例有一个LCK进程。

4.LMD

这个进程负责的是Global Enqueue Service(GES)。详细来说,这个进程负责在多个实例之间协调对数据块的訪问顺序。保证数据的一致性訪问。它和LMSn进程的GCS服务还有GRD共同构成RAC最核心的功能CACHE fusion。

Global Resource Directory由Global Cache Service 来管理

记录资源的模式、资源的角色、block在实例中的状态、在各个活动的节点公布资源的master、在必要的时候又一次公布master(比如实例的启动和关闭)





Global Cache Service

1、资源模式。三种

null(默认的)

share(s)(查询)

exclusive(x)(能够改变block的内容。其它的实例就是null mode)。

2、资源角色,两种

Local:第一次请求资源的初试模式;仅仅有一个实例能够有这个block的dirty copy

global:当一个block在多个实例中变dirty时。local就变成了Global Block仅仅能由Global Cache Service写到磁盘中





Cache Fusion Block的传输

比如:有ABCD四个节点,Global Cache Service:GCS

1.Read with no transfer

假设c节点须要向共享磁盘文件上读一个block,那么它向Global Cache Service发送请求,这个时候请求被定向到节点D,D是这个BLOCK的MASTER(每一个资源都有master)。GCS把资源授权为Share Mode和local Role,在文件夹中记录下了他的状态(文件夹在节点D),然后通知C,C把这个资源从null改成share。

C開始I/O,如今C有了这个BLOCK以SHARE模式从磁盘文件读取。

2.Read to write transfer

B也要这个block,并且不仅是读。并且还要改变它的内容。

B向D(这个block的master)的GCS发出请求,GCS向C发出请求。要求C把这个block给B。C把block给B。B收到后,告诉GCS,如今B能够改动这个block了。



3.Write to write transfer

A向D节点的GCS发出请求。GCS告诉B节点放弃他的Exclusive锁,而且把当前的Image传到A,假设这个请求没有完毕,就会放到GCS的队列里。B把这个block传到A。这个时候要写Log,强制lg flush。把模式变成null。

发送到A而且告诉它这个Exclusive的资源能够用了。A收到这个block的image。会通知GCS而且告诉它block的status是exclusive,这个时候,B不能对这个block做操作。尽管在它的buffer
cache中。它还有这个block的copy。

4.Write to read transfer

C要读这个block,先向D(Master)发出请求,GCS要求A把它传输到C,A接受到请求完毕它的工作。这可能会在A写LOG和LOG FLUSH 在发送这个block之前。A会把它的Exclusive锁减少到share模式。C把从A收到的block的SCN取出来。建设成一个资源Assumption信息为GCS更新Global Resource Directory。



通过设置參数gc_files_to_locks。能够关闭cache fusion。

cache resource 在一个节点上不在须要继续master,dynamic Remastering能把它移动到不同的节点。





问题:

1.在全部实例都未读取该块,而第一个实例读取时。是怎么加的锁,加的什么锁?假设此时有还有一个实例也要读这个块,差点儿是同一时候的,那么oracle怎样来仲裁,怎样让当中一个读取。而还有一个再从前者的缓存中通过cache来得到?

2.假设一个块已经被其它实例读入。那么本实例怎样推断它的存在?

3.假设某个实例改变了这个数据块,是否会将改变传递到其它实例,或者说其它实例是否会知道并又一次更新状态?

4.假设一个实例要swap out某个块,而同一时候其它实例也有这个块的缓存,改动过的和未改动过的,本实例改动的和其它实例改动的。怎样操作?truncate一张表,drop一张表和单实例有何不同?

5.应该怎样设计应用,以使rac真正发挥作用,而不是引入竞争。导致系统被削弱?

6.RAC下锁的实现。

锁是在各实例的SGA中保留的资源,通常被用于控制对数据库块的訪问。每一个实例一般会保留或控制一定数量与块范围相关的锁。

当一个实例请求一个块时,该块必须获得一个锁,而且锁必须来自当前控制这些锁的实例。也就是锁被分布在不同的实例上。

而要获得特定的锁要从不同的实例上去获得。

可是从这个过程来看这些锁不是固定在某个实例上的,而是依据锁的请求频率会被调整到使用最频繁的实例上,从而提高效率。









1.一个A实例读取块须要向GCS发送请求,该块的master实例B会通过GCS将资源授权为SHARE MODE 。在master节点B记录状态,之后在通知请求的节点A由null改成share,開始I/O,

所以此时请求资源的节点A加的是 SHARE 锁。假设有还有一个实例C要读取该块,通知master节点B的GCS发出,要求A把block给C。

2.一个实例请求块的时候须要訪问该块的master节点,此时该块的master节点就会通过GCS跟踪拥有该块的实例,该块的版本号是什么。还有该块处于什么模式。在master节点中都有记录。

3.假设一个实例改变了数据块,GES的LMON进程中的磁盘心跳机制起作用,每一个节点的CKPT进程每隔3秒更新控制文件的一个数据块,控制文件是共享的,来检查是否及时更新。

4.查看master节点的该块的当前状态。假设改动的块为写LOG和LOG FLUSH之前。就会把当前节点拥有的块由exclusive锁减少到share锁。

5.通过GCS和GES来实现。





參考博客:http://www.cnblogs.com/sopost/archive/2013/03/14/2960490.html

 http://blog.csdn.net/tianlesoftware/article/details/5353087

 《 大话Oracle RAC》

RAC Cache Fusion 原理理解的更多相关文章

  1. Oracle RAC cache fusion原理測试

    Oracle RAC cache fusion是RAC最核心的工作机制.他把全部实例的SGA虚拟成一个大的SGA区,每当不同的实例请求同样的数据块,这个数据块就须要在实例间进行传递. 那究竟什么时候传 ...

  2. oracle rac cache fusion

    转载自 http://blog.csdn.net/tianlesoftware/article/details/6534239 Introduction This post is about orac ...

  3. RAC Cache Fusion Background Processes

    Acdante--每日三省吾身-- . 什么是缓存融合? .缓存融合工作原理? .缓存融合关键进程以及作用?

  4. 关于Oracle RAC中SCN原理和机制的探索

    今天看书时看到了关于RAC中SCN的问题,为了进一步搞清楚其内部原理和机制,对该问题进行了广泛的查阅和搜索,遗憾的是,可以参考的资料很少,网上大部分是人云亦云的帖子,其中,详细介绍其内部原理和机制的资 ...

  5. Oracle rac架构和原理

        Oracle RAC Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性:同时可以自动实现并行处理 ...

  6. JUC回顾之-ConcurrentHashMap源码解读及原理理解

    ConcurrentHashMap结构图如下: ConcurrentHashMap实现类图如下: segment的结构图如下: package concurrentMy.juc_collections ...

  7. Cache的原理、设计及实现

    Cache的原理.设计及实现 前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构.指令结构.信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特 ...

  8. redis实现cache系统原理(五)

    1. 介绍 cache就是人们所说的缓存.我们这里所说的cache是web上的.对用户来说,衡量一个网站是否具有良好的体验,其中一个标准就是响应速度的快慢.可能网站刚上线,功能还较少,数据库的记录也不 ...

  9. POJ1523(割点所确定的连用分量数目,tarjan算法原理理解)

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7406   Accepted: 3363 Description C ...

随机推荐

  1. HTTPS 加密算法原理机制解析

    当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒内进行大量的通信.InfoQ的这篇文章对此有非常详细的描述.这些复杂的步骤的第一步,就是浏览器与服务器之间协商一 ...

  2. Foundation 框架 NSFileManager,NSData 简单的文件操作

    一.简单展示NSFileManager的使用 #import <Foundation/Foundation.h> int main(int argc, const char * argv[ ...

  3. window 7 改变窗口颜色

    对于刚刚重新安装的window7系统的盆友来说,不能改变窗口的颜色,和别人的window7窗口颜色和样子不一样和不好玩,那么我教大家,如何更改窗口颜色. 首先,重装的系统用软件激活之后,肯定还没还得急 ...

  4. Eclipse怎么全局搜索替换(整个项目)

    链接地址:http://jingyan.baidu.com/article/3ea51489c1c0d752e61bba2e.html 我们用Eclipse编程,有时候需要将整个项目的某个字符串替换成 ...

  5. jQuery异步请求(如getJSON)跨域解决方案

    相信大家在使用jQuery异步请求非自己网站内相对资源(通过别人站点上的URL直接读取)使经常会遇到如下错误吧,实际上这些错误都是浏览器安全机制“搞的鬼”,才让我们开发路上遇到了拦路虎. 当你直接在浏 ...

  6. multi-threaded copy command - robocopy

    we can copy files by the powerful robocopy tool, and it allow copy using muliti-threaded as well. As ...

  7. KVO 的使用和举例

    KVO(key-value Observer),通过命名可以联想到,一个监视着监视着键值配对,让一个对象A来监视另一个对象B中的键值,一旦B中的受监视键所对应的值发生了变化,对象A会进入一个回调函数, ...

  8. 名叫Florida的女孩问题

    近读列纳德·蒙洛迪诺的<醉汉的脚步>,读到第六章,作者举了一个超级变态的例子来解释条件概率或者说是贝叶斯概率. 1.先来看一个简单点的问题:已知所有有2个孩子的家庭,其中一个家庭2个孩子都 ...

  9. FreeBSD 10安装KDE桌面环境简介(亲测bsdconfig命令有效)

    FreeBSD 10出来一段时间了,自己摸索装上KDE环境,网上介绍的都是10以前版本的,要么对现在的不合适,走了一大圈弯路还是装不好:要么太繁琐且装了一堆无用的软件.本着让更多人能快速方面的入门Fr ...

  10. ThreadSafeClientConnManager用来支持多线程的使用http client

    import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.clien ...