RAC cache fusion机制实现原理分析
在单实例中,进程要想修改数据块,必须在数据块的当前版本(Currentcopy)上进行修改RAC环境也一样
这便涉及到一系列问题:
如何获得数据块的版本在集群节点间的分布图?
如何知道哪个节点拥有的是当前版本?
如何完成传递过程?
这一系列问题的解决依靠内存融合技术(cachefusion)
cachefusion通过高速的privateinterconnect,在实例间进行数据块传递
这是RAC最核心的工作机制,他把所有实例的SGA虚拟成一个大的SGA区
每当不同的实例请求相同的数据块,这个数据块就需要在实例间进行传递
在Oracle7的OPS中,这种传递是通过磁盘完成的,也叫“Disk-BasedPing”
也就是第1个实例必须先把这个数据块写回磁盘,然后第2个实例再从磁盘上读取这个数据块
这种依靠磁盘来完成数据传递极大影响系统性能
在Oracle8i引入“Net-BasedPing”通过PrivateInterconnect来传递数据块
但是8i只能传递没有修改过的数据块,对于“脏块”还是要通过磁盘来传递,这一点和OPS一样
在Oracle9i的cachefusion,所有的数据块,无论修改的或者没有修改的,都可以通过PrivateInterconnect传递
系统系能得到极大的改善
在cachefusion中,每个数据块都会被映射成一个cachefusion资源,或者说是一个PCM资源
PCM资源实际上是一个数据结构,资源的名称就是DBA(数据块地址)
每个进程对数据的请求都是分步完成:
①把DBA转换成PCM资源名称
②把这个PCM资源请求提交给DLM(分布式锁管理器)
③DLM进行GlobalLock的申请、释放活动,只有进程获得了PCMLock,才能继续下一步
也就是实例首先要获得数据块的使用权
整个cachefusion有两个服务组成:GCS和GES
⑴GCS服务负责数据块在实例间的传递
由后台进程LMSn完成
⑵GES服务负责锁管理
在多个实例之间协调对数据块的访问顺序,保证数据的一致性访问
由后台进程LMD完成
相关推荐
-
RAC cache fusion机制实现原理分析
在单实例中,进程要想修改数据块,必须在数据块的当前版本(Currentcopy)上进行修改RAC环境也一样 这便涉及到一系列问题: 如何获得数据块的版本在集群节点间的分布图? 如何知道哪个节点拥有的是当前版本? 如何完成传递过程? 这一系列问题的解决依靠内存融合技术(cachefusion) cachefusion通过高速的privateinterconnect,在实例间进行数据块传递 这是RAC最核心的工作机制,他把所有实例的SGA虚拟成一个大的SGA区 每当不同的实例请求相同的数据块,这个数
-
javascript垃圾收集机制的原理分析
前面的话 javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存.在编写javascript程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理.下面将详细介绍javascript的垃圾收集机制 原理 垃圾收集机制的原理很简单:找出那些不再继续使用的变量,然后释放其占用的内存,垃圾收集器会按照固定的时间间隔,或代码执行中预定的收集时间,周期性地执行这一操作 局部变量只在函数执行的过程中存在.而在这个过程中,会为局部变量在栈(或堆
-
javascript类继承机制的原理分析
目前 javascript的实现继承方式并不是通过"extend"关键字来实现的,而是通过 constructor function和prototype属性来实现继承.首先我们创建一个animal 类 js 代码 复制代码 代码如下: var animal = function (){ //这就是constructor function 了 this .name = 'pipi'; this .age = 10; this .height = 0; } //建立一个动物的实例 var
-
Android Handler 机制实现原理分析
handler在安卓开发中是必须掌握的技术,但是很多人都是停留在使用阶段.使用起来很简单,就两个步骤,在主线程重写handler的handleMessage( )方法,在工作线程发送消息.但是,有没有人想过这种技术是怎么实现的呢?下面我们一起探讨下. 先上图,让大家好理解下handler机制: handler机制示例图 上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍: ActivityThr
-
Android Handler 机制实现原理分析
handler在安卓开发中是必须掌握的技术,但是很多人都是停留在使用阶段.使用起来很简单,就两个步骤,在主线程重写handler的handleMessage( )方法,在工作线程发送消息.但是,有没有人想过这种技术是怎么实现的呢?下面我们一起探讨下. 先上图,让大家好理解下handler机制: handler机制示例图 上面一共出现了几种类,ActivityThread,Handler,MessageQueue,Looper,msg(Message),对这些类作简要介绍: ActivityThr
-
kafka的消息存储机制和原理分析
目录 消息的保存路径 数据分片 log分段 日志和索引文件内容分析 在 partition 中通过 offset 查找 message过程 日志的清除策略以及压缩策略 日志的清理策略有两个 日志压缩策略 消息写入的性能 顺序写 零拷贝 消息的保存路径 消息发送端发送消息到 broker 上以后,消息是如何持久化的? 数据分片 kafka 使用日志文件的方式来保存生产者和发送者的消息,每条消息都有一个 offset 值来表示它在分区中的偏移量. Kafka 中存储的一般都是海量的消息数据,为了避免
-
MyBatis Plus插件机制与执行流程原理分析详解
MyBatis Plus插件 MyBatis Plus提供了分页插件PaginationInterceptor.执行分析插件SqlExplainInterceptor.性能分析插件PerformanceInterceptor以及乐观锁插件OptimisticLockerInterceptor. Mybatis 通过插件 (Interceptor) 可以做到拦截四大对象相关方法的执行 ,根据需求完成相关数据的动态改变. 四大对象是: Executor StatementHandler Parame
-
elasticsearch的灵魂唯一master选举机制原理分析
master作为cluster的灵魂必须要有,还必须要唯一,否则集群就出大问题了.因此master选举在cluster分析中尤为重要.对于这个问题我将分两篇来分析.第一篇也就是本篇,首先会简单说一说mater选举的一些算法,及elasticsearch的选举原理.第二篇也就是下一篇,会结合zenDiscovery代码为仔细分析elasticsearch的master选举的实现. 简单来说master的作用跟单个jvm中的同步关键字synchronized相同,集群中多节点协调工作必须要保证数据的
-
elasticsearch的zenDiscovery和master选举机制原理分析
目录 前言 join的代码 findMaster方法 总结 前言 上一篇通过 ElectMasterService源码,分析了master选举的原理的大部分内容:master候选节点ID排序保证选举一致性及通过设置最小可见候选节点数目避免brain split.节点排序后选举只能保证局部一致性,如果发生节点接收到了错误的集群状态就会选举出错误的master,因此必须有其它措施来保证选举的一致性.这就是上一篇所提到的第二点:被选举的数量达到一定的数目同时自己也选举自己,这个节点才能成为master
-
Java 动态代理原理分析
Java 动态代理原理分析 概要 AOP的拦截功能是由java中的动态代理来实现的.说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执行.Spring中的动态代理是使用Cglib进行实现的.我们这里分析的是JDK中的动态代理实现机制. 下面我们通过例子快速了解JDK中的动态代理实现方式. 示例 需要代理的接口 public interface IHello { public void sayHel
随机推荐
- ASP固定比例裁剪缩略图的方法
- EditPlus中的正则表达式实战(6)
- java编程经典案例之基于斐波那契数列解决兔子问题实例
- RSA加密的方式和解密方式实现方法(推荐)
- js轮播图透明度切换(带上下页和底部圆点切换)
- 解析php时间戳与日期的转换
- Android App中使用LinearLayout进行居中布局的实例讲解
- ThinkPHP开发框架函数详解:C方法
- 利用Python读取文件的四种不同方法比对
- 轻松创建nodejs服务器(3):代码模块化
- Linux下安装mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz
- linux服务器用centos还是ubuntu系统
- 自动清理 MSSQL Server Table Collation问题的解决方法
- jquery html动态生成select标签出问题的解决方法
- 用JavaScript和jQuery实现瀑布流
- 完美解决客户端webview持有的页面缓存,不会立即释放的问题
- PHP多线程编程之管道通信实例分析
- 使用@符号让C#中的保留字做变量名的方法详解
- 解析android中的dip,dp,px,sp和屏幕密度
- vue组件父子间通信详解(三)