文章分类 - openGauss源码解析
openGauss数据库是华为公司在深度融合技术应用于数据库领域多年经验的基础上,结合企业级场景要求,推出的新一代企业级开源数据库。本文将从各方面对该openGauss数据库源码进行详细介绍。
摘要:openGauss源码解析:事务机制源码解析(5)5.2.3 MVCC可见性判断机制openGauss利用多版本并发控制来维护数据的一致性。当扫描数据时每个事务看到的只是拿快照那一刻的数据,而不是数据当前的最新状态。这样就可以避免一个事务看到其他并发事务的更新而导致不一致的场景。使用多版本并发控制的
阅读全文
摘要:openGauss源码解析:事务机制源码解析(6)3. 关键数据结构及函数1) 快照快照相关代码如下:typedef struct SnapshotData { SnapshotSatisfiesFunc satisfies; /* 判断可见性的函数;通常使用MVCC,即HeapTupleSatis
阅读全文
摘要:openGauss源码解析:事务机制源码解析(6)5.2.4 进程内多线程管理机制简述进程内多线程管理机制相关数据结构及多版本快照计算机制。1. 事务信息管理数据库启动时候维护了一段共享内存,每个线程初始化的时候会从这个共享内存中获取一个槽位并将其线程信息记录到槽位中。获取快照时,需要在共享内存数组
阅读全文
摘要:openGauss源码解析:事务机制源码解析(7)2. 多版本快照机制因为openGauss使用一段共享内存来实现快照的获取以及各线程事务信息的管理,计算快照持有共享锁以及事务结束持有排他锁有严重的锁争抢问题。为了解决该冲突,openGauss引入了多版本快照机制解决锁冲突。每当事务结束时,持有排他
阅读全文
摘要:openGauss源码解析:事务机制源码解析(2)2. 事务底层状态TransState结构体代码如下:从内核视角的事务状态,真正意义上的事务状态。typedef enum TransState{TRANS_DEFAULT,/* 当前为空闲缺省状态,无事务开启*/TRANS_START,/* 事务正
阅读全文
摘要:openGauss源码解析:事务机制源码解析(1)5.2 事务并发控制事务并发控制机制用来保证并发执行事务的情况下openGauss的ACID特性。下面将逐一介绍事务并发控制的各组成部分。5.2.1 事务状态机openGauss将事务系统分为上层(事务块TBlockState)以及底层(TransS
阅读全文
摘要:openGauss源码解析:事务机制源码解析(1)第5章 事务机制源码解析事务是数据库操作的执行单位,需要满足最基本的ACID(原子性、一致性、隔离性、持久性)属性。(1) 原子性:一个事务提交之后要么全部执行,要么全部不执行。(2) 一致性:事务的执行不能破坏数据库的完整性和一致性。(3) 隔离性
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(35)4.3.9 恢复恢复部分有两个目的,一是在崩溃或关机后达到最新的一致状态,也称为冷启动(coldstart),二是在HA复制场景中,在备机侧通过重放redo log完成复制。冷启动时,当所有WAL记录都重放完成后恢复结束;但在HA复制场景中,复制将
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(31)4.3.7 重做日志MOT重做日志(Redo Log)使用预写式日志(write-ahead logging,WAL)技术来确保数据完整性。WAL的核心概念是,内存中的数据和索引的更改只有在记录下这些更改之后才会发生。因此写入重做日志是MOT提交协
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(32)3. 关键类和数据结构重做日志的关键类和数据结构如表4-39所示。表4-39 重做日志的关键类和数据结构简介关键类和数据结构描述RedoLog类负责事务数据序列化的主要类,它是TxnManager类的成员对象。RedoLog的commit方法由Tx
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(33)4.3.8 检查点与openGauss磁盘存储引擎不同,MOT存储引擎不基于页面存储数据,因此MOT的检查点机制与磁盘引擎的检查点机制完全不同。MOT检查点机制基于CALC(checkpointing asynchronously using lo
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(34) 2. 详细流程 (1) 一旦触发了检查点,Checkpointer后台会触发MOT的CREATE_SNAPSHOT事件。 (2) 当检查点处于REST阶段时,CheckpointManager将等待在COMPLETE阶段启动的事务完成。 (3)
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(25)4.3.2 FDWopenGauss使用FDW API与内存引擎进行对接。实现上分为两个层次。(1) 消费者层——FDW API的实现,它由提供数据管理和操作的静态函数组成。这些函数通过fdwapi.h中的FdwRoutine结构以回调的形式暴露给
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(26)3) CREATE索引图4‑46 CREATE索引时序图如图4-46所示,用户希望在现有的内存表中创建新索引时,openGauss通过FDW适配器将请求转发给MOT存储引擎。正常事件流:FDW从MOT引擎中检索表对象并创建一个索引对象。然后,对每个
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(27)5) 截断表 图4-48 截断表时序图如图4-48所示,用户截断现有的内存表内容时,openGauss通过FDW适配器将请求转发给MOT存储引擎。正常事件流:FDW从MOT引擎中检索表对象并转发截断表的请求。表中每个索引的索引数据被截断,并且将DD
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(28)4.3.3 内存表的存储Table类包含管理数据库中内存表所需的所有项。表由以下组件组成:列、主索引和可选的二级索引。关键成员变量说明如表4‑36 Table类的关键成员变量所示。表4‑36 Table类的关键成员变量成员变量描述tableCoun
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(29)4.3.5 事务事务部分覆盖了从openGauss映射到MOT的所有支持的DDL/DML操作。事务与并发控制机制紧密耦合,每个操作都必须通过并发控制管理,并完成相应的行为。MOT基于乐观并发机制,几乎不使用锁,因此每个客户端都有自己的事务视图,并且
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(30) 4.3.6 并发控制 MOT采用源自SILO的单版本并发控制(concurrency control,CC)算法,是一种OCC算法。并发控制模块满足内存引擎的所有事务性需求,其主要设计目标是为MOT内存引擎提供各种隔离级别的支持。当前支持如下隔离
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(23)主备日志同步,主要包括以下6个场景。1. 备机发起复制请求,进入流式复制。图4-38 主备建连和流式复制流程图如图4-38所示,日志复制请求是由“wal receiver”线程发起的。在libpqrcv_connect函数中,备机通过libpq协议
阅读全文
摘要:openGauss源码解析:存储引擎源码解析(24)4.3 内存表MOT(memory-optimized tables,内存表)是事务性、基于行存储的存储引擎,针对众核和大内存服务器进行了优化。MOT是openGauss数据库的一个先进特性,可提供非常高的事务性工作负载性能。MOT完全符合ACID
阅读全文