oracle集群管理-内存融合

1 临时表空间区分

和回滚表空间不同,RAC数据库并不要求为每个实例创建自己的临时表空间。但是每个实例会在临时表空间中分配自己的临时段(temporary segemtn),

而且这个临时段是不能被多个实例同时使用的。如果某一个实例需要在临时表空间中分配更多的临时段,而当时并没有足够的空闲空间的话,发出请求的实例会要求其他的实例释放所占用的临时段,这个过程是由smon进程完成的。

所以,如果系统比较忙,smon的工作负载比较重,当某个节点需要申请其他实例所占用的临时段时可能会花费比较多的时间,进而会出现性能问题

2  共享池  * 

主要保存与内存融合相关的资源信息,例如GCS(Global cache service)和GES(Global Enquence Service)资源的定义信息和它们相关的锁信息,以及其他信息。‘

select * from v$sgastat where pool ='shared pool' and (name like '%ges%' or name like '%gcs%'

3 数据库缓冲区高速缓冲区 

主要包含与RAC相关的一些特殊类型的数据块 ,以及数据块的一些管理信息。

select count(block_count) c from v$gc_element;

总结12,由于RAC数据库中会有一些特有的信息保存到共享池和数据库缓冲区高速缓存中,无论在创建新的RAC数据库时还是把单实例数据库升级成RAC时,

都要额外分配一些空间来保存这些信息。对于大部分的系统,为共享池额外分配25%~30%的空间,数据库缓冲区额外分配5%~10%的空间就可以了

当然,作者给出的这个值并不是Oracle官方的推荐值,而是基于对RAC数据库的理解和实际经验。、

GRD

GRD是RAC数据库实现多实例并发访问数据库资源的基础,而LMS\LMD\和LMON进程是实现方式。

LMS实现GCS管理,LMD实现GES的管理,LCK作为GES的补充。

PCM资源:是指数据库的块,或者buffer,当客户端需要访问一个数据块时,LMS就会创建一个PCM资源对应这个数据块,并常见用于保护这个资源的锁结构。

4 后台进程

LMON(Global Enqueue Service Monitor):这个进程负责维护数据库集群层面的节点关系(Cluster Group Service,CGS),并与其他实例的LMON进程定期进行心跳通信。

当节点间出现了通信问题时,这个节点负责完成实例层面的重新配置和GES层面的实例恢复。当某一个(或多个)实例离开或加入数据库集群时,这个进程也负责完成实例层面的reconfiguration。

同时这个进程还会和LMD进程一起完成一些GES层面的管理工作,而且这个进程也会完成DRM的一部分工作。每个数据库实例只会存在一个LMON进程。
LMS(Global Cache Service Process):LMS负责完成GCS的大部分工作,它会维护GRD(Global Resource Directory)中数据块资源的信息,完成数据块(或者叫buffer)在实例之间的传递工作,相关消息的发送和接收工作。

同时,这个进程也要参与DRM的工作。可以说,这个进程是整个Cache Fusion体系中最忙碌的进程,所以这个进程的优先级为RT。每个实例中会存在多个LMS进程,名称为LMS<x>(x从0开始,最多可以到z,也就是说最多可以有36个LMS进程存在)。

默认的LMS进程数量是根据节点的CPU数量计算出来的,例如:MIN(CPU_COUNT/2,2)),不同版本计算LMS进程数量的公式可能不同。


LMD(Global Enqueue Service Daemon):LMD进程主要负责GES相关资源的管理工作,GES资源主要是指Oracle中的排队(Enqueue)资源。

由于RAC数据库包含很多实例,每个实例都能够对相同的数据进行操作,所以需要LMD进程对这些排队资源进行管理和协调。LMD进程默认的优先级并不是实时的,而且每个实例只包含一个LMD进程(名称为lmd0)。

当然,LMD进程也会参与DRM的工作。换句话说,DRM特性需要LMON、LMS和LMD进程协同工作。


LCK(Instance Enqueue Process):主要负责实例锁(实例锁的含义并不是实例级别的锁,而是指这种锁所管理的资源仅限于本地实例)管理,可以认为LCK进程是LMD进程的补充,但是它和LMD进程所管理的资源是不同的。

实例级别的锁主要包括:library cache lock、row cache lock。如果使用了result cache的话,result cache lock也包含在内。

实例级别的锁是由LCK进程通过广播(broadcast)的方式进行管理的,也就是说,当一个进程需要申请持有一个实例锁时,LCK进程会以广播的方式向所有远程实例的LCK进程发送这个请求,而远程实例收到这个请求之后,更新自己的信息并反馈消息(如果远程实例的某个进程以不兼容的方式持有了这个锁,对应实例的LCK进程会通知持有者进程释放对应的锁,然后再返回)。

另外,当shared pool出现压力需要释放一些内存来存放新的cursor时,LCK进程会释放rowcache的一些内存。每个实例默认情况下只包含一个LCK进程,进程名为lck0。
DIAG(Diagnostic Capture Process):负责转储(dump)数据库相关的诊断信息。当系统发现可能出现了性能问题时,diag进程会响应其他进程发出的dump请求,

将相关的诊断信息写到自己的跟踪日志文件(trace file)中。另外当用户使用oradebug进行全局(global)级别的dump操作时,每个实例的diag进程都会将本地节点的诊断信息dump到自己的跟踪日志文件中。

需要说明的是,diag进程在生成诊断信息时采用的操作都是轻量级的,并不会对系统产生可见的性能影响。
LMHB(Global Cache/Enqueue Service Heartbeat Monitor):这个进程从11gR2版本开始出现,它的作用是监控LMS、LMD、LMON、LCK等与RAC相关的主要后台进程,以便在它们出现问题时进行相应的操作。后面的章节中将详细介绍这部分内容。

4 GES

1 全局锁的分配是通过每个节点的GES服务协调完成的,对应进程为LMDn和LCKn进程

   GES负责维护字典缓存和库缓存内的一致性,字典缓存是实例SGA内所存储的对数据库字典信息的缓存,用于高速访问数据字典信息。由于字典存储在内存内,因而某个节点对数据字典进行修改(例如ddl操作)必须立即被传播到所有节点的字典缓存中,GES负责完成这个工作,并消除实例间出现的差异,相应的锁必须在实例间进行维护,而GES必须确保请求访问相同对象的多个时间间不会出现死锁,LMON,LCK和LMD进程联合工作实现字段缓存和库缓存的一致性。

  GES负责管理Non-cache function资源,GES管理和控制的锁主要包括Dictionary Cache锁和Library cahce锁。

  • Dictionary Cache锁

   一个用户在一个节点drop一张表,因为每个实例都有字典缓存,所有RAC中有5个字段缓存,drop表的节点必须通知其他4个节点清除字典缓存中被DROP表的定义,RAC通过GES自动处理这个过程。

  • library cache锁

    当一个数据库对象,例如一张表、视图、存储过程、包、或者索引在解析sql、DML、DDL、PLSQL\java应用,解析语句过程获得一个library cache锁,GES通知其他实例相关共享DDL锁的存在,避免在编译的过程中通过其他实例来修改这些对象的结构。

5  GCS

2 GCS负责实例间的数据块传递工作。对应的进程为LMSn(n从0-9)

#################################GRD#########################################

在GRD中包含如下共享资源信息:

1 数据块标识符,例如数据库地址(DBA)

2 如果数据块在集群多个节点的buffer cache中存在,GRD中保存该数据块最新版本的位置。

3 实例持有数据块的模式,null(N)、SHARED(S)\Excluisive(X)
4 每个实例持有数据块的角色,LOCAL或者GLOBAL.

GRD中的信息是cache fusion的元数据信息,是cache funsion协调资源和管理的来源

##############################################################################

每个时间点只有一个实例能够修改相同的数据块,通过GES协调块的全局锁之后,GCS负责实例间的数据块传递工作。

内存融合的频繁使用会导致数据库性能下降,这可能是RAC数据库瓶颈所在。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值