GRD  (global resource directory)保存着所有实例中资源的分布情况

GCS  (global cache service)具体执行cache fusion 工作的服务,对应进程LMSn

GES  (global enqueues service)协调实例之间的GCS完成数据传递工作,完成non-cache fusion资源的管理工作,对应进程LMD.

Cache-fusion全局锁

全局锁的分配是通过每个节点的GES服务协调完成的,每个时间点只有一个实例能够修改相同的数据块,通过GES的协调获得块的全局锁之后,GCS负责实例间数据块的传递工作。(cache fusion的频繁使用会导致数据性能的下降)。

GES(全局队列服务)负责维护字典缓存和库缓存内的一致性。字典缓存是实例的SGA内所存储的对数据字典信息的缓存,用于高速访问数据字典信息。GES控制数据库中所有的library cache锁和dictionary cache锁。

数据一致性

实例A的一个事务更新了一个数据块,但没有提交,这个时候实例B查询包含事务的这个数据块,那么实例A会将UNDO段中的一致性数据块传送给实例B,实例B中存放的该数据块就是CR状态的数据块,并非是当前最新的数据块。如果这个时候实例B要更新这个数据块,实例A会将SGA中当前的数据块降级,然后传递给实例B,实例B中存放的数据块就是当前最新的数据块。(相同的块在不同实例中分布体现在GRD中,GRD能展示块的分布图)

Past Image(PI)是维护脏块的拷贝,GCS管理PI,GCS在实例失败恢复的时候会用到PI版本的块。Oracle允许即使操作块的事务未提交,如果其他实例有事务修改相同块的不同行,块也能在实例间传递,但是必须保留原来实例中未提交的块,这个块就是PI.

(1)   并行操作过程中的PI

在多节点实例并行操作的过程中,当实例请求修改块时,GCS服务的LMSn进程会将数据块从最后修改此块的实例传送给请求的实例,而LMSn会在原来持有此块的实例中保留此数据库的PI版本。

(2)   资源的磁盘写

因为可能在集群的多个实例中存在多个被修改过的数据块,由GCS管理的写规则必须确保将最近版本的数据块写入磁盘中。GCS还必须确保所有之前的版本已从其他cache中清除。对数据块的写可以由任何持有此数据块的当前版本或PI数据块的实例发起。

Cache fusion应用场景

(1)   多节点实例并行读

实例A从吸盘读取一个块的时候,该块在GRD中记录的状态为SCUR,实例B查询该表,通过cache fusion获取该块,由于并不对该块进行更改,所以实例A块的状态没有发生变化,在实例B中的块的状态是CR。实例C再次执行相同的查询从实例A获取该块,同样实例C中的块状态也是CR。

(2)   多节点实例并行读和写

实例A从磁盘读取数据块到内存中,记录块的状态为SCUR。实例B要更新该块中的行,必须获得排他的锁,且更新的块必须是当前最新的块,实例B通过cache fusion将实例A的块拷贝到自己的buffer cache中,同时实例A的块状态变为CR,实例B中块的状态是XCUR。

(3)   多节点实例并行写

实例A执行UPDATE语句从磁盘读取块到实例中,块的状态为XCUR。实例B要更新同一个块的其他行记录,实例A的块状态变为CR,实例B通过cache fusion将实例A的块拷贝到实例B的buffer cache中,实例B上块的状态为XCUR。如果实例C也要更新同一块,实例C必须等待实例B执行完成后,实例B的状态变更为CR,通过cache fusion将实例B上的块拷贝到实例C,并修改修改实例C块状态为XCUR。以上操作,实例A和实例B中保存的CR状态的块都是PI版本。

(参考《构建最高可用RAC》)

cache-fusion笔记的更多相关文章

  1. RAC Cache Fusion 原理理解

    cache fusion  .   grd  .  drm   .   gcs  .   ges cache fusion  1.RAC是一个数据库执行在多个实例上.通过DLM(Distributed ...

  2. Oracle RAC cache fusion原理測试

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

  3. oracle rac cache fusion

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

  4. 1011MySQL Query Cache学习笔记

    转自:http://blog.chinaunix.net/uid-16844903-id-321156.html 测试环境 MySQL 5.5 innodb_version 1.1.6 MySQL Q ...

  5. Guava Cache 使用笔记

    https://www.cnblogs.com/parryyang/p/5777019.html https://www.cnblogs.com/shoren/p/guava_cache.html J ...

  6. 缓存融合(Cache Fusion)介绍

    概念 简单地说,缓存融合就是把Oracle RAC数据库中所有数据库缓存作为一个共享的数据库缓存,并被RAC中的所有节点共享.它是实现RAC的基本技术. 缓存融合主要有如下四个功能: (1) 提供扩展 ...

  7. RAC Cache Fusion Background Processes

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

  8. Oracle RAC学习笔记01-集群理论

    Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真 ...

  9. Varnish Cache

    1 Varnish简介 Varnish是高性能且开源的反向代理服务器和HTTP加速器(cache server).其开发者Poul-Henning Kamp是FreeBSD核心的开发人员之一.Varn ...

随机推荐

  1. git push报错error: failed to push some refs to 'git@github.com'

    git push报错error: failed to push some refs to 'git@github.com' $ git push -u origin master To git@git ...

  2. JS--我发现,原来你是这样的JS(二)(基础概念--躯壳篇--不妨从中文角度看js)

    一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第二篇(基础概念--躯壳篇),有着部分第三章的知识内容,当然其中还有我个人的理解. 红宝书这本书可以说是难啃的,要看完不容易,挺 ...

  3. 【three.js练习程序】鼠标滚轮缩放

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. webpack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  5. 使用 Roslyn引擎动态编译代码

    Roslyn引擎自2014年开源至今这么久,一直没怎么了解过,虽然VS2015早就集成了它. 以前老一套的动态编译方法在 .NET Core中似乎不再支持了,很多方法都是未实现的.下面就介绍如何在.N ...

  6. Operating System Error Codes

    How To Fix Windows Errors Click here follow the steps to fix Windows and related errors. Instruction ...

  7. PowerShell下载文件

    $webRequest = [System.Net.HttpWebRequest]::Create("http://go.microsoft.com/fwlink/?LinkID=14915 ...

  8. python基础学习2

    一.算数运算符 +加法,-减法,*乘法,/除法,//地板除,%求余,**幂运算. 二.逻辑运算符 非not.且and.或or.优先级依次为not,and,or. 三.print()end结尾 prin ...

  9. MySQL基础值 存储过程和函数

    一.创建存储过程和函数 什么是创建存储过程和函数? 就是将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MYSQL服务器中. 创建存储过程的语句是:CREATE  PROCE ...

  10. AfxBeginThread

    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和 ...