oracle集群管理-内存融合
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锁的存在,避免在编译的过程中通过其他实例来修改这些对象的结构。
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数据库瓶颈所在。