详解K-DB RAC集群下的锁机制管理(三) ——K-DB锁包含的信息以及运行机制

简介:

这是关于K-DB锁技术的最后一部分,此前,陆续介绍了K-DB的演进、基本架构、锁目录的存储以及同数据块映射关系的建立等。本文将介绍K-DB锁包含的信息和运行机制,也就是每条锁到底包含哪些信息,以及每一条锁是如何建立、执行和取消的。

K-DB锁包含的信息

不同数据库产品的锁记录的信息差异不大,通用数据库在集群架构下通常需要的锁信息如下。锁信息的复杂性更多与技术架构相关。集群架构的数据库锁,需要记录的信息远远超过了Active-Standby架构的数据库产品,K-DB锁纪录的信息主要包含以下几点:

  1. DataBlock address。锁是针对数据块的,所以锁中的信息需要记录数据块的物理地址。
  2. Instance id。在集群环境下,会存在多个实例,需要记录下具体的实例id,才能知道该数据块正在被哪个节点访问。
  3. Lock mode。节点在访问数据块时,需要根据读写需求,申请不同的锁模式。如果是读的话,一般是申请S锁(共享锁),如果是写入的话,需要申请X锁(独占锁)。
  4. Block state,也就是数据块的状态。在锁申请之后,数据块的状态也需要进行变化。在常用的数据块中,包括SCUR,XUR。在这里重点给大家介绍一个状态叫做PAST IMAGE 。因为这个状态在单节点中是没有的。如果一个数据块在某一个节点中被修改后,然后被传输到了其他节点,那么本节点存储的数据块状态为PI(Past Image)block。PI block 在本节点中保留了一份最新更新的数据块的内容。当某一个节点down机后,利用PI能够提升数据库的恢复速度,K-DB正是利用了这项技术使得故障恢复速度明显快于业界其他产品。
  5. Role,是关于全局数据的一致性的信息。 一个数据块可以同时在多个节点的缓存中存在,而且可以不一致。当数据库的缓存中,一个数据块最多只有一个节点与磁盘中的数据不一致时。这个的角色就是local。当2个或2个以上的节点与磁盘数据不一致时,这个数据块的角色升级为global。对比global角色,local角色的数据块的回写会更简单,按照单节点的处理方式即可。而global 方式的话,处理的更加的复杂,需要在多个节点中进行确认。

详解K-DB RAC集群下的锁机制管理(三) ——K-DB锁包含的信息以及运行机制

K-DB锁的运行及测试数据

数据库锁的运行可分为申请、使用和取消三个环节,其中申请环节最为复杂,其他环节较为简单。

CWLS——锁管理的核心

CWLS(Cluster Wait-lock Service)模块负责系统锁的批准、生成和执行,是系统锁管理的核心模块。当一个instacne 向数据块的master 节点申请锁时,master 节点通过cluster wait-lock service查看当前锁的使用情况。申请进程主要一共有2个队列,一个是已经分配的队列,一个是等待转换队列。分配成功的队列上的锁模式的兼容性,必然是兼容的,与之相反的是,等待转换队列的锁模式是不兼容的,需要等待。例如,2个节点同时申请对用一个数据块进行读取操作。那么它们需要申请的是读共享锁。这2个锁是兼容的,可以同时放在分配列表中。GLD 中会记录下这两个节点的锁信息——共享锁。之后第三个节点想要修改这个数据块,它需要申请的独占锁。master节点的CWS发现该模式与当前分配链表中的锁信息不兼容,此时它需要等待。先把它放在conver queue中等待。向grant queen中的正在持有锁的实例发送请求,要求它们将当前的锁进行降级为与他兼容的模式。


原文发布时间为:2016-08-03 

本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。



相关文章
|
8月前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
271 12
|
Windows
Windows平台如何修改监听的服务名称?
【8月更文挑战第15天】在Windows平台上可透过注册表编辑器、命令提示符或第三方工具修改服务的显示名称。首先,通过注册表编辑器找到`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services`下的目标服务,修改其“DisplayName”键值。或者,在命令提示符中使用`sc config`命令来变更服务名称。此外,利用第三方工具如Windows Service Manager也能简化此过程。修改前请确保了解可能的影响并做好备份。
567 4
|
安全 Ubuntu Linux
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
|
SQL 关系型数据库 分布式数据库
从Citus深度解密如何基于PostgreSQL做分布式数据库
前言分布式数据库能够解决海量数据存储、超高并发吞吐、大表瓶颈以及复杂计算效率等单机数据库瓶颈难题,当业务体量即将突破单机数据库承载极限和单表过大导致性能、维护问题时,分布式数据库是解决上述问题的高性价比方案。数据库作为分布式改造的最大难点,就是"和使用单机数据库一样使用分布式数据库",这也一直是广大...
4882 0
从Citus深度解密如何基于PostgreSQL做分布式数据库
|
SQL 安全 Shell
文件包含漏洞渗透攻击_3 | 学习笔记
快速学习 文件包含漏洞渗透攻击_3
231 0
文件包含漏洞渗透攻击_3 | 学习笔记
|
存储 缓存 NoSQL
有关 COW (CopyOnWrite) 的一切
写入时复制(英语:Copy-on-write,简称COW)是一种计算机 [程序设计]领域的优化策略。其核心思想是,如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是 [透明]的。此做法主要的优点是如果调用者没有修改该资源,就不会有副本(private copy) 被创建,因此多个调用者只是读取操作时可以共享同一份资源。
有关 COW (CopyOnWrite) 的一切
|
SQL 监控 NoSQL
【巡检问题分析与最佳实践】MongoDB 内存高问题
本文将由浅入深帮您查看、分析和优化云数据库MongoDB的内存使用。
【巡检问题分析与最佳实践】MongoDB 内存高问题
|
Ubuntu Linux
LINUX(CENTOS)下载编译nload
LINUX(CENTOS)下载编译nload
1178 0