Oracle:RAC 进程简介

来源:这里教程网 时间:2026-03-03 16:48:32 作者:

GCS 全局缓存后台进程

全局缓存主要服务于数据块(PCM 资源)。GCS 负责维护全局缓冲存储区内的缓存一致性,包括:数据块的状态,数据块的位置,数据块的传输等。GCS 确保一个实例在任何时刻想修改一个数据块时,都可获得一个全局锁资源,从而避免另一个实例同时修改该块的可能性。进行修改的实例将拥有块的当前版本(包括已提交的和未提交的事物更改)以及块的一致性拷贝。如果另一个实例也请求该块,那么 GCS 要负责跟踪拥有该块的实例、拥有块的版本是什么,以及块处于何种模式。LMS 进程是 GCS 的实现。

LMS(Global Cache Service Process,全局缓存服务进程)

LMS 是整个 Cache Fusion 体系最活跃和最忙碌的进程。它负责维护 GRD 中的数据块资源信息,处理在实例之间传输的块的一致副本。LMS\<N> 进程接收响应来自 LMD 的执行锁操作的请求,响应对 GCS 资源的锁管理服务请求,并将它们发送到服务队列。此外它还承担全局死锁的检测任务并监控锁转换是否超时。所以一般在压测或者高cpu消耗型系统,可以提高这个进程的优先级,以确保不会出现CPU不足的情况。可以通过查看x$kjmsdp查看这个守护进程的统计信息。

LMON(Global Enqueue Service Monitor,锁监控进程)

LMON 主要负责整个数据库集群层面的一致性关系(CGS),监控整个集群的全局队列和资源。在进程出现问题的情况下会执行 global enqueue 恢复,保持 GCS 内存结构的一致性,并且它还负责集群重新配置和锁重新配置(节点加入或离开),当一个实例加入或者离开集群后,LMON 会对 lock 和 resource 进行 reconfiguration。另外 LMON 会在不同的实例间进行通讯检查,如果发现对方通讯超时,就会发出节点 eviction。LMON 主要也是借助两种心跳机制来完成健康检测。节点间的网络心跳(Network Heartbeat)即节点间定时发送 Ping 包检测节点状态,超时时间由参数 \_cgs_send_timeout 控制,缺省是 300 秒,这时的重构是 IMR 触发的。通过控制文件的磁盘心跳(ControlfileHeartbeat):每个节点的 CKPT 进程每隔三秒更新一次控制文件的一个数据块,这个数据块叫做 Checkpoint Progress Record,由于控制文件是共享的,因此实例间可以相互检查对方是否及时更新以判断状态,时间由参数 \_controlfile_enqueue_timeout 控制,缺省是 900 秒也是由由 IMR 触发的。

DIAG(Diagnostic Capture Process,诊断守护进程)

DIAG 守护进程是一个轻量级进程,它使用 diag 框架来监视集群的运行状况。它捕获信息,以便在发生故障时进行后续诊断。diag 进程会响应别的进程发出的 dump 请求,将相关的诊断信息写到 diag trace 文件中。在 RAC 上,当发出 global oradebug 请求时,会由每个实例的 diag 进程来打印诊断信息到 diag trace 中。

GES 全局队列后台进程

全局排队服务(GES)跟踪所有 Oracle 队列机制的状态(No-PCM 资源),它主要负责维护数据字典缓存(dictionary cache)和库缓存(library cache )的一致性和事务并发执行的一致性控制。dictionary cache 是实例的 SGA 内所存储的对数据字典信息的缓存。由于数据字典信息存储在内存中,因而在某个节点上对数据字典进行的修改(如 DDL)必须立即被传播至所有节点上的 dictionary cache。GES 负责处理上述情况,并消除实例间出现的差异。同时,为了不影响依赖这些对象的 SQL 语句的解析,数据库内对象上的库缓存锁会被去掉。这些锁必须在实例间进行维护,而全局队列服务必须确保请求访问相同对象的多个实例间不会出现死锁。LMON、LCK 和LMD 进程联合工作来实现全局队列服务的功能。GES 是除了数据块本身的维护和管理(由 GCS 完成)之外,在 RAC 环境中协调节点间其他资源的重要服务。

LMD(Global Enqueue Service Daemon)

LMD 进程主要负责响应 GES,也就是 Oralce 中的排队资源的管理工作。每一个全局队列的当前状态存储在相应的实例共享内存(sharedpool)中。当一个会话发出了 global enqueue 请求时,首先本节点的 LMD0 进程会响应这个请求,LMD0 进程开始寻找这个 enqueue 资源的 master 节点。找到后将这个请求发送给 master 节点,如果需要的话,master 节点会增加一个新的 master 资源。从 mater 节点可以知道资源的 owner 和 waiter,当这个资源被授予请求实例后,master 节点的 LMD0 会通知请求实例的 LMD0,最后请求实例的 LMD0 通知前台进程。此外 LMD 还有一个功能就是死锁检测及处理基本流程如下:

    LMD 进程定期搜索各个实例的锁信息,发现可能的死锁。

    在可能的死锁进程被发现之后,LMD 会验证死锁。

    在得到验证之后,LMD 会选择回滚导致死锁的进程的当前 SQL 语句,来打破死锁。

LCK(Instance Enqueue Process)

LCK 主要负责实例锁,可以认为他是 LMD 进程的完善补充。它主要处理在本实例层的锁(Row Cache ,Library Cache,Result Cache),这些实例级的锁的 owner, waiter 是 LCK0 进程。RAC 环境中如果本地的实例没有拥有这个 lock,那么需要申请这个 lock,前台进程会等待的等待事件就是我们常遇到的 DFS Lock Handle。实例级别的锁是有 LCK 进程通过广播的方式进行管理的。

ASM

ASMB(ASM Background Process)

自动存储管理后台进程(ASM 心跳进程),负责同管理存储的 ASM 实例进行通信,提供对 ASM 实例的更新统计,和提供对 ASM 实例的一个 “heartbeat”,让它知道它仍然是活着和起作用。

RBAL(ASM Rebalance Master Process)

再平衡进程。作为 ASM 磁盘组进行 rebalance 时的协调者(Coordinator)。在数据库实例上,由它来管理 ASM 磁盘组

Onnn(ASM Connection Pool Process)

连接池进程。是从数据库实例连接到 ASM 实例上的一些连接池,通过这些连接池,数据库可以发送消息给 ASM 实例。比如,由它将打开文件的请求发送给 ASM 实例,这些连接池只处理一些较短的请求,不处理创建文件这种较长的请求。

PZ(PQ slaves)

PZnn 进程(图找进程,picture 找进程)(从 PZ99 开始)用于查询 GV$ 视图,这种查询需要在每个实例上并行执行。如果需要更多的 PZ 进程,会自动生成 PZ98、PZ97、... (降序)

11g 特有

PING(Interconnect Latency MeasurementProcess)

PING 进程(11g 引入)用来检查集群中各个实例间的私网通讯状况。每个实例每隔几秒会发送给其它实例一些消息,这些消息会由其它实例的 PING 进程收到。发送和接收信息花费的时间会被记录下来并判断是否正常。

LMHB(Global Cache/Enqueue ServiceHeartbeat Monitor,本地心跳监控进程)

LMHB 进程(11g引入)监控本地的 LMON、LMD、LCK0、RMS0、LMSn 等进程是否运行正常,是否被阻塞或者已经 hang 了。

RMSn(Oracle RAC Management Process)

RAC 管理进程。完成对RAC的一些管理任务,比如当一个新的实例加入到集群后,给这个实例创建相关的资源。 

RSMN(Remote Slave Monitor Process)

管理后台的 slave 进程的创建,作为远程实例的协调者来完成一些任务。 

GTXn(Global Transaction Process)

在 RAC 环境中对于 XA 事务提供透明支持,维护在 RAC 中的 XA 事务的 global 信息,完成 global 事务的两阶段提交。 

RCBG(Result Cache Background Process)

这个进程用来处理 RAC 上 Result Cache 相关的消息。 

ACMS(Atomic Control File to Memory Service Process)

作为每个实例上的 agent 来保证 SGA 的更新在 RAC 的所有实例上都是同步的,或者是全局成功提交,或者由于一些问题而导致全局回滚。 

相关推荐