您好,欢迎访问三七文档
OracleRACCacheFusion系列八:OracleRAC分布式资源管理(一)从Oracle8开始,DLM数据库(存储有关资源,锁,进程的信息)已集成在OracleSGA中。DLM内存区用于存储所有锁相关的master节点。DLM不提供锁定资源的能力,但是它会将资源提供为可锁定实体。在Oracle8i中,主节点与目录节点是固定的这对锁资源申请访问并不友好。从Oracle9i开始,这种固定的对应方式被取代,Oralce使用动态remaster技术,通过lookup表运用hash算法将换算后的的masterkey与实际的master做一一对应。资源:应用程序访问的任何对象客户端:任何要求资源的进程锁:客户端对资源的意图DLM服务:允许客户端应用程序创建,修改和删除共享的锁。DLM数据库:存储有关资源,锁,进程的信息资源在Oracle中定义为(程序访问的任何对象)。每个资源都需要有当前授予的用户锁列表,此列表称为GrantQ。此外还有相对应的ConvertQ,即等待转换的锁队列。此外,有些资源拥有用于存储少量锁定值的块(LVB),一般16字节。例如,并行查询子进程在申请的PS资源(ParallelSlaveSynchronization)的时候使用它存储kxfpqd结构传递给其他节点。这两种资源类型具有不同的数据结构。客户端(用户)必须锁定资源才能使用它所代表的内容。资源类型与数据结构的对应:Enqueues:锁定非PCM资源lockElements:锁定PCM资源如果Oracle进程没有遵循“使用前锁定”规则,那么这个系统就会乱套。它可能在一段时间内不会显示为系统或数据损坏。当进程锁定资源的授权队列时,它被称为“拥有”资源。下图显示了对资源的GrantQ的锁定。锁可以是进程或组拥有的。进程拥有的情况下,则PID字段显示进程号。组拥有锁的情况下,GID字段表示为组号,DID字段表示为客户端事务的XID(TxID)。在一个简单的实现中,DLM为进程提供锁定。这在维护进程到会话映射时工作正常。但是,在MTS(共享服务器)和XA(分布式)场景下,会话可能会涉及迁移,或者多个进程完成一个事务。这时候提供基于会话的标识符来控制对锁的访问是非常明智的选择,这就是组锁定引入的缘由。通常,Oracle提供事务XID作为组ID,然后处理该事务的任何进程都只提供XID和锁定操作即可。影子资源•主节点具有所有资源信息,例如完全授权队列和转换队列。•影子资源存在于对此资源感兴趣(申请锁定)的任何其他节点上,但它只知道自己本地节点上的锁。影子资源存在于对资源感兴趣的任何其他节点上,即对该资源打开锁定的任何节点。在主节点以外的节点上保持锁定时,主节点会在本地保留锁定的副本。资源感兴趣的每个节点都只有一个锁的副本。复制锁保存在主节点上,这是主节点所必需的信息。其他信息每个节点可以根据自己所需进行维护。主节点具有主锁,本地节点具有影子锁。基础资源结构及资源管理GRD(DLM)维护资源的所有节点上的锁的信息。锁master分布在群集中的所有节点上。主节点包含资源的描述以及资源上持有最高锁定模式的锁信息。Oracle根据资源名称通过使用数组来计算资源的主节点:res_hash_val_kjga(对于非PCM资源)和pcm_hv_kjga(对于PCM资源)。它选择一个节点来管理资源的相关信息和在资源上的锁信息,这种节点称为资源的主节点。当节点加入或离开集群时,重构阶段Oracle会以最小化资源迁移更新res_hash_val_kjga和pcm_hv_kjga数组。每个数组都包含一个bucket包含物理节点号。对于非PCM资源,Oracle对资源名称进行Hash以获取存储桶编号bidx,然后使用res_hash_val_kjga[bidx]确定资源的主节点编号,集群中的每个节点的数组都是私有化的。resourcename:用于标识的唯一名称资源,ValueBlock:内存中用于存储有关资源信息的区域。GrantedQueue:在资源上授予锁。ConvertQueue:锁在从一种模式转换为另一种模式。每个非PCM资源在集群中通过名称进行标识,名称”由3个4字节的整数组成(ub4n[3])。Non-PCM:名称由3个4字节的整数组成(ub4n[3])。n[0]设置为id1,n[1]设置为id2,n[3]接收字符串值(例如“DI”或“LB”)。PCM:由具有两个整数的名称标识,具有第三个整数字符对为“BL”。
本文标题:Oracle-RAC-Cache-Fusion-系列八:Oracle-RAC-分布式资源管理(一)
链接地址:https://www.777doc.com/doc-7708990 .html