RAC Cache Fusion 原理理解
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 原理理解的更多相关文章
- Oracle RAC cache fusion原理測试
Oracle RAC cache fusion是RAC最核心的工作机制.他把全部实例的SGA虚拟成一个大的SGA区,每当不同的实例请求同样的数据块,这个数据块就须要在实例间进行传递. 那究竟什么时候传 ...
- oracle rac cache fusion
转载自 http://blog.csdn.net/tianlesoftware/article/details/6534239 Introduction This post is about orac ...
- RAC Cache Fusion Background Processes
Acdante--每日三省吾身-- . 什么是缓存融合? .缓存融合工作原理? .缓存融合关键进程以及作用?
- 关于Oracle RAC中SCN原理和机制的探索
今天看书时看到了关于RAC中SCN的问题,为了进一步搞清楚其内部原理和机制,对该问题进行了广泛的查阅和搜索,遗憾的是,可以参考的资料很少,网上大部分是人云亦云的帖子,其中,详细介绍其内部原理和机制的资 ...
- Oracle rac架构和原理
Oracle RAC Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性:同时可以自动实现并行处理 ...
- JUC回顾之-ConcurrentHashMap源码解读及原理理解
ConcurrentHashMap结构图如下: ConcurrentHashMap实现类图如下: segment的结构图如下: package concurrentMy.juc_collections ...
- Cache的原理、设计及实现
Cache的原理.设计及实现 前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构.指令结构.信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特 ...
- redis实现cache系统原理(五)
1. 介绍 cache就是人们所说的缓存.我们这里所说的cache是web上的.对用户来说,衡量一个网站是否具有良好的体验,其中一个标准就是响应速度的快慢.可能网站刚上线,功能还较少,数据库的记录也不 ...
- POJ1523(割点所确定的连用分量数目,tarjan算法原理理解)
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7406 Accepted: 3363 Description C ...
随机推荐
- UVa1368/ZOJ3132 DNA Consensus String
#include <stdio.h>#include <string.h> int main(){ int a[4][1000]; // A/C/G/T在每列中出现的次数 ...
- C#操作Office.word(三)
前面两篇博客讲解了怎么通过程序控制word的生成,包括生成文字.添加表格.添加图片等.这篇博客主要说一下怎么把word图片转换成pdf. using System; using System.Coll ...
- php制作数据字典
/** * 生成mysql数据字典 */ header("Content-type:text/html;charset=utf-8"); // 配置数据库 $database = ...
- codeforces 622E. Ants in Leaves
题目链接 给一棵有根树, 每个叶子节点上有一只蚂蚁. 在0时刻蚂蚁开始向上爬, 同一时刻, 除了根节点以外, 一个节点上面不能有2个蚂蚁. 问所有的蚂蚁都爬到根节点需要的最短时间. 因为除了根节点, ...
- google浏览器的安装
很简单,命令行下安装命令:apt-get install google-chrome-stable(如安装不成功,输入apt-get -f install进行修复依赖,之后在菜单里就可以看到图标了) ...
- 12-C语言字符串
目录: 一.字符串 二.字符串输入输出函数 三.指针数组(字符串数组) 回到顶部 一.字符串 1 一组字符数组,以数组的首地址开始,以ASC码的'\0'结束. 2 字符串与普通数组的区别:普通数组没有 ...
- Google日历添加农历、节日和天气插件(步骤)
Google日历添加农历.节日和天气插件(步骤) Google功能非常多,Google日历只是其中一个,而且支持Exchange账户(iPhone,WP7,诺基亚等)和Google账户登录(andro ...
- MSSQL SERVER 2008 R2 无法连接到数据库,用户sa登录失败,错误:18456
原因:勾选了强制实施密码策略,但是设置的密码很简单依然可以,比如:123456 这是为什么?原来,这个功能要用到NetValidatePasswordPolicy() API这个函数. (该功能只有在 ...
- MVC模式已死
MVC模式:Model模型 View试图 Control控制器,是目前主流模式,被当作服务器软件入门基本模式学习和掌握,主流框架Struts 1/2 JSF Wicket基本都顺理成章支持MVC模式. ...
- 宣布在 Azure 镜像库中正式推出 Windows Server 2012 R2 并降低 Windows Azure 的实例定价
我们今天将宣布两条消息,为使用基础结构服务的客户提供更多选择和成本节约:在镜像库中推出 Windows Server 2012 R2 以及降低 Memory Intensive 计算实例定价. 虚拟机 ...