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. java web分享ppt大纲 -- servlet容器简介

    今天在公司分享了java web的ppt,把ppt大纲放在这里,希望可以帮助需要的人 servlet容器简介 定义 狭义上的,servlet容器为java Web应用提供运行时环境,负责管理servl ...

  2. ASP.NET之电子商务系统开发-4(二级分类)

    一.前言 继上次的订单,这是第四篇.记录一下分类和筛选.这功能是最后做的,因为我完全不懂其原理.后来通过同学的指导(一位很有天赋的同学,比我牛逼一个层次,同样是高三.:D),终于也是完成了.在写这篇博 ...

  3. Html中截切文章内容,造成标签不全的问题

    把标签全部进行替换 ) { string strText = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+ ...

  4. Java format 简单应用

    一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", " ...

  5. Android 开发笔记“Application 理解”

    Android 中Application类用法 1.             Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时 ...

  6. PowerShell Remove all user defined variable in PowerShell

    When PS scripts executes, it is possibly create much user defined variables. So, sometimes these var ...

  7. 20 你应该知道的PHP库

    下面是一些非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法. 图表库 下面的类库可以让你很简的创建复杂的图表和图片.当然,它们需要GD库的支持. pChart – 一个可以创 ...

  8. perl5 第七章 控制结构

    第七章 控制结构 by flamephoenix 一.条件判断二.循环:  1.while循环   2.until循环   3.for循环   4.针对列表(数组)每个元素的foreach循环  5. ...

  9. Windows Azure 存储的冗余存储选项和只读访问跨地域冗余存储

    我们很高兴地宣布,现在我们使客户可以获得对数据更高的读取可用性.该预览功能称为"只读访问- 跨地域冗余存储(RA-GRS)",使客户可以在存储帐户主要区域无法读取数据时,通过跨 ...

  10. HDU 3231 Box Relations

    题目大意: 给定一些正方体的关系,要求一组符合这些关系的正方体坐标,如果不存在符合条件的正方体坐标,IMPOSSIBLE.(Special Judge) 实力还是太弱了,完全不会…… #include ...