共计 2232 个字符,预计需要花费 6 分钟才能阅读完成。
本篇内容主要讲解“数据库缓存融合分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“数据库缓存融合分析”吧!
概念
简单地说,缓存融合就是把 Oracle RAC 数据库中所有数据库缓存作为一个共享的数据库缓存,并被 RAC 中的所有节点共享。它是实现 RAC 的基本技术。
缓存融合主要有如下四个功能:
(1)提供扩展性的传输。
(2)在实例间传输数据库的映射。
(3)跟踪资源的当前位置和状态。
(4)在每个实例的 SGA 的目录结构中保存资源信息。
图中描述了两节点 RAC 数据库的运行情况。每个节点都运行一个数据库实例,每个实例包含一组 Oracle 进程和用于缓存的系统全局区(SGA)。除了这些集群中的每个节点都还运行着一组特殊的进程:全局缓存服务进程(Global Cache Service,GCS)和全局队列服务进程(Global Enqueue Service,GES),GES 主要负责维护字典缓存和库缓存内的一致性,GCS 主要负责协调不同实例间对数据块的访问,它们通过 Global Resource Directory(GRD)来维护和记录每个数据块的状态,使其在群集中的各个节点之间同步和串行处理对数据的访问。同时,每个数据区块又隶属于某一个节点,对于这个数据区块来说,这个节点称为主节点(Master)。为了在服务器之间均衡工作负载,群集中所有服务器都可以成为部分数据块的主节点,GCS 是 oracle 用来实施缓存融合的机制。
缓存融合工作原理
我们知道,Oracle RAC 是采用共享磁盘方式实现数据库的群集。群集环境中所有节点共享且并发地对磁盘上的数据库进行更新,另外还要额外地需要同其它节点进行同步和串行机制,以避免两个或多个节点同时更新同一数据页上的记录,那么 Oracle RAC 是如何利用缓存融合处理数据同步的?下面通过几种情况模拟分析下缓存的同步原理。
(1)节点 A 读取一个全新的数据块,该数据块没有被任何节点读入
①节点 A 的请求发给 GCS,GCS 把这个请求转发给这个数据块的主节点,这里假定是节点 B。因为这个数据块没有在任何节点的内存中,GCS 标记这个数据块状态为 S(shared,共享状态),并记录到 GRD 中。
②接着 B 告诉节点 A 状态修改了,准备工作都完成了。然后节点 A 记录共享状态在自己的实例中,并读入该数据块。这时,节点 A 持有了该数据块,并在 GRD 中进行记录,标记持有该数据块。此时,整个过程发生了一次 IO 操作。
(2)节点 C 要修改刚才节点 A 读入的数据块,这里假定节点 A 刚才读入的数据块 SCN 是 100。
①节点 C 找到该数据块的主节点,也就是节点 B,要求能加一个 X 标记(exclusive,独占状态),表明要修改数据。但是这个数据块可能已经存在于多个节点的实例中,每个实例都有个 S 标记。
②GCS 会告诉所有持有该数据块的实例,把状态 S 标记转换为 N 标记(null,空状态)。
③最后一个从 S 标记转换为 N 标记的实例把数据块发送到需要对其进行修改的节点如节点 C 上。
④这时节点 C 的实例就可以对该数据块加上 X 标记,并通知该数据块的主节点,也就是节点 B 的 GCS,GCS 将最新的标记与位置记录到 GRD,并关闭以前节点的资源记录。这时节点 C 就可以修改该数据块了,假定把 SCN 从 100 修改成了 101,这个时候磁盘上的数据块 SCN 还是 100,整个过程是通过内部互联进行数据交换,没有磁盘 IO 产生。
(3)节点 D 也要修改该数据块
①与节点 C 修改该数据块类似,节点 D 也会找到该数据块的主节点,也就是节点 B,要求加一个 X(exclusive,独占状态)的锁,表示要修改该数据块。
②这时 GCS 会告诉上一次修改成功的节点 C,放弃它加上的 X 标记,因为别的节点也要修改这个数据块。
③节点 C 会确保这个数据块的改变,已经记入联机日志中,然后转换 X 标记为 N 标记,并把这个数据块拷贝到节点 D。
④节点 D 加上 X 标记,并通知该数据块的主节点,也就是节点 B 的 GCS,GCS 将最新的标记与位置揭露到 GRD,并关闭以前节点上的资源记录。这时节点 D 就可以修改该数据块了,假定把该数据块的 SCN 从 101 又修改成 102,但是磁盘的数据块上的 SCN 还是 100。可以发现 RAC 在这个过程中,也没有任何磁盘操作,同样是通过内部互联来完成的。
(4)节点 A 要重新读取该数据块
①节点 A 还是一样,首先找到该数据块的主节点,也就是节点 B,希望能读取最新的数据块,也就是 SCN 为 102 的内容。
②GCS 根据 GRD 得知最新的数据块在节点 D 上,于是 GCS 通知节点 D。节点 D 需要确保刚才修改过的数据块已经记录在联机日志中,如果已经确定记录过,则把原来的 X 标记转换为 S 标记。
③节点 D 拷贝数据块到节点 A 的实例,这时节点 A 获得该数据块,并获得 S 标记。
④最后再告诉该数据块的主节点,也就是节点 B,GCS 记录最新的标记与位置到 GRD,这个时候,节点 A 与节点 D 同时持有 S 标记的相同的数据块,数据块的 SCN 为 102,但是磁盘中的数据块 SCN 还是 100,最后如果发生写操作,只要最新的一个节点发生写操作即可,所以该数据块虽然在不同节点、不同实例中发生了多次改变,最终却只有一次写 IO 操作。
到此,相信大家对“数据库缓存融合分析”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!