由前面章节我们知道RAC数据库环境中的锁可以分为两类,针对数据块的buffer lock也就是PCM锁,还有一类是针对队列(enqueue)的lock我们称为non-PCM锁。



non-PCM锁:


non-PCM锁,包含持有者(grant)和等待者(convert)队列,锁类型,访问模式。因为锁是维护一致性的机制,那么其实他就是一种串行的操作。为了提升并发性能,Oracle将锁赋予了很多模式或者说是级别,这样在维护一致性原则的前提下,通过锁的兼容性模式(进程不能以申请的模式获得锁,因为其他进程正在以不兼容的方式持有这个锁(grant),那么申请进程进入(convert)等待者队列)来提升并发能力。此外,non-PCM锁需要维护集群中多实例访问的一致性,每个锁也会有一个master节点,在master节点中会包含这个锁的完整的grant和convert 队列信息(GRD的组成部分),而每一个访问过这个锁的节点,也会保存本地的grant 和convert队列信息。当用户进程需要申请锁的流程前面介绍LMD进程的时候已经解释过,这里不再阐述。

可以参照以下的表格,了解锁的模式和兼容性。



PCM锁:

在系列一文章我们大概知道,一个数据块可以存在多个buffercache中。它可以被多个实例以不同的模式持有,持有的模式要依据这个数据块的状态,是被读还是被更新。GCS使用持有模式来决定是否实例当前拥有修改这个数据块的权限。当我们对数据块进行写操作操作时会持有独占模式(x)锁。当我们对数据块进行读操作时我们会申请共享模式(s)锁。RAC环境数据块的角色分为了Local和Global两种角色。Global Role意味着有多个实例拥有和磁盘不一致的版本,如果想要把这个数据块写回到磁盘,必须联系GRD,由拥有数据块Current版本的实例完成写动作。不会出现多个数据块同时拥有X锁的情况。



块访问模式为null,缓冲区状态名称为:cr ----实例可以对块执行一致的读取。也就是说,如果实例包含旧版本的数据。

块访问模式为:S,缓冲区状态名称为:scur ----实例具有对块的共享访问权,并且只能执行读取。

块访问模式为X,缓冲区状态名称为:xcur -----实例对块具有独占访问权,可以对其进行修改。

块访问模式为NULL,缓冲区状态名称为:pi ----实例已对块进行了更改,但将其副本保留为过去的镜像,以记录更改前的状态。

SCUR和PI两个状态是RAC环境中特有的。在集群数据库中,任何时候在xcur状态下缓冲的任何一个块只能有一个副本。要对块执行修改,进程必须将XCUR缓冲区状态分配给包含数据块的缓冲区。

SCN:

SCN作为Oracle数据库的时钟,它就像我们的北京时间。现在由于多实例的引入,每个实例的时钟同步就显得尤为重要。在RAC环境中,SCN的不同实例间的同步由GCS负责维护。在10gR2版本已经Oracle使用Lamport方式同步,10gR2版本以后Oracle使用BOC(Broadcase on commit)方式实现同步。Lamport大致原理:在所有的节点通信内容中都携带SCN,每个节点把接收到的SCN和本机的SCN对比,如果本机的SCN小,则调整本机的SCN和接收到的SCN一致。如果节点间通信不多,则会主动地定期相互通报,因此即使节点处于idle状态,还是会有一些redo log产生。BOC大致原理是:只有当某个节点的SCN发生改变时才进行传播。我们知道Oracle数据库所有的改变都通过LGWR去做日志持久化,所以只然而然LGWR成为同步SCN的主要进程,它会协调LMS,LMD进程完成节点间的SCN同步。使用BOC方式牺牲了一部分LGWR的写性能但是却保证了节点间的SCN一致性。而lamport虽然没有性能影响但是SCN的一致性保证就会偏差。

除了上述的主要改变以外还有一些小的改变:

Redo Thread:RAC环境下有多个实例,每个实例都需要自己的一套Redo Log文件来记录日志,这套Redo Log就叫做一个Redo Thread。所有实例的联机日志必须放在共享存储上,某个节点异常关闭,剩下的节点就要进行Crash Recovery。

Archive Log:RAC中每个实例都会产生自己的归档日志。每个实例可以在本地存放归档日志。但是如果在单个实例上执行备份归档日志、或者进行media recovery操作,要求这个节点必须能够访问到所有实例的归档日志,所以最好归档能够方案共享存储上。

Undo Tablespace:在RAC环境下,每个实例单独的管理自己的undo表空间。

| 作者简介

刘金龙·沃趣科技高级数据库技术专家

多年Oracle海量数据以及高并发数据库管理工作经验,主要负责Oracle数据库产品及售后二线支撑。精通Oracle 11g及12c内部运行机制,有丰富的基于全方位技术栈的数据库及RAC集群层故障诊断、性能调优、OWI、数据库备份恢复及迁移经验。



沃趣科技,让客户用上更好的数据库技术!