自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 海山数据库(He3DB)源码详解:海山PG 表和元组的组织方式(2)

访问Page时会先将它加载到内存,所以Page可以仅用一个char *类型的指针来表示,指向内存中该Page的起始位置。由于Page的大小是已知的,通过Page指针和Page的大小即可表示并访问一个Page。在构建一个Page时,会调用PageInit函数进行初始化。

2025-01-23 16:25:52 580

原创 海山数据库(He3DB)源码详解:海山PG 表和元组的组织方式(1)

PostgreSQL是一种开源的关系型数据库管理系统,具有强大的功能和可靠性。在PostgreSQL数据库中,表和元组是数据组织的基础单元。其中,表是PG数据库中存储数据的逻辑结构,由多个列(Column)和行(Row)组成。列代表了数据字段,而行则代表了一条条的数据记录。每个表都有其独特的属性,如主键()、外键()、索引(Index)等。主键用于唯一标识表中的一条记录,外键用于建立表与表之间的关联,索引则用于提高查询效率。在PostgreSQL中,元组通常指的是表中的一行数据,即一条记录。

2025-01-23 16:24:50 846

原创 海山数据库(He3DB)源码详解:海山Mysql 自动测试框架MTR

在修改内核代码后,不仅需要测试新增功能,同时也要对原有功能做回归测试,以保证新加代码对原有功能没有影响,这就需要用到MySQL源码自带的测试框架,简称MTR。主要应用于MySQL等相关数据库项目开发测试,对单个功能点或者模块进行正确性和功能性测试,该工具在SQL级别对MySQL进行单元测试。不仅仅能测试SQL语句,也能根据实际需要测试不同启动参数配置的MySQL服务器和客户端从而验证指定的功能逻辑。

2025-01-23 16:23:48 891

原创 海山数据库(He3DB)源码详解:ResourceOwnerData及ResourceArray结构体解析

本文介绍了事务执行过程中,检查一个堆元组是否对当前事务可见,用于确保事务可以看到正确的数据版本。

2025-01-23 16:22:48 656

原创 海山数据库(He3DB)源码详解:RecordTransactionCommit 函数解读

是 PostgreSQL 中用于记录事务提交的关键函数。它负责在事务结束时执行一系列操作,包括日志记录、清理资源、更新事务状态等。这个函数是 PostgreSQL 事务提交机制的核心部分,确保事务的原子性和持久性。

2025-01-23 16:21:47 581

原创 海山数据库(He3DB)源码详解:MemoryContextData及MemoryContextMethods结构体解析

内存上下文是 PostgreSQL 的内存管理机制,用于高效地分配和释放内存,支持嵌套内存上下文,并允许在事务或函数结束时批量释放内存。等)都有自己的实现方式,这些函数指针提供了一种统一的接口,允许通过多态的方式操作不同的内存上下文。这种设计使得 PostgreSQL 的内存管理机制既灵活又高效,能够适应多种内存分配策略和应用场景。这种设计使得 PostgreSQL 的内存管理机制既灵活又高效,能够适应复杂的内存分配和释放需求。是 PostgreSQL 中定义的一组函数指针,用于实现内存上下文(

2025-01-23 16:20:44 754

原创 海山数据库(He3DB)查询解析模块解析(一):词法分析scan.l解析

本文介绍了词法分析的基本原理,海山数据库使用的lex词法分析工具,并对scan.l文件进行了解析,在后文中将进一步解析词法分析,并梳理sql命令是如何经过词法和语法分析转化为一颗分析树。

2025-01-23 16:19:44 734

原创 海山数据库(He3DB)查询解析模块分析(二):语法分析gram.y解析

定义段可分为代码段和声明部分,代码段由%{和%}%{/**/do { \else \%}%pure-parser //纯解析器,不依赖于全局变量或静态变量,而是通过参数传递和返回值来管理状态%expect 0 //希望冲突数量为0%name-prefix="base_yy" //代表生成的函数和变量前缀从yy变成base_yy%locations声明段中的union来声明所有表示符号的可能c类型,将标识符和C语言中定义的类型对应起来。

2025-01-23 16:18:44 724

原创 大云海山数据库(He3DB)源码详解:He3DB-SimpleLruReadPage_ReadOnly

本文基于大云He3DB,针对SimpleLruReadPage_ReadOnly进行源码解读分享。这个函数的主要逻辑是:尝试在共享锁下快速查找页面。如果找到页面,更新统计信息并返回槽位编号。如果未找到页面,切换到独占锁并调用常规读取函数。通过这种方式,函数尽量减少锁的冲突,提高读取效率。

2025-01-23 16:17:42 535

原创 大云海山数据库(He3DB)源码详解:He3DB-SimpleLruReadPage

本文基于大云He3DB,针对SimpleLruReadPage进行源码解读分享。函数名作用SimpleLruReadPage 函数的作用是从 SLRU 缓冲区中读取一个页面。它通过以下步骤实现:检查页面是否已在内存中。如果页面正在被读取或写入,等待 I/O 完成。如果页面不在内存中,选择一个空闲槽位。从磁盘读取页面数据到槽位。更新页面状态并返回槽号。

2025-01-23 16:16:42 1034

原创 大云海山数据库(He3DB)源码详解:He3DB-MultiXactIdCreateFromMembers

本文基于大云He3DB,针对MultiXactIdCreateFromMembers 进行源码解读分享。MultiXactIdCreateFromMembers 函数的主要逻辑如下:检查本地缓存中是否已经存在相同的成员集合,避免重复创建。验证成员中是否只有一个更新事务,确保多事务的合法性。分配新的 MultiXactId 和偏移量。创建 XLOG 记录,描述新创建的多事务。将多事务信息写入 OFFSET 和 MEMBER 日志文件。

2025-01-23 16:15:41 904

原创 海山数据库(He3DB)源码详解:海山Mysql 崩溃恢复(3)-日志应用

为崩溃恢复的入口函数,其从调用,传入参数读取存在系统表空间的获得的,该函数在日志解析、日志应用等线程创建之前,进行崩溃恢复操作。MySQLredo日志崩溃恢复整体流程如图所示,其中,日志应用的流程主要集中在右边部分,用于解析或应用日志记录体,用于恢复页面函数,这是应用日志记录到数据库页面的关键步骤。图中还显示了日志解析和日志应用流程之间的交互,特别是在解析日志记录后,如何将它们应用到数据库页面以完成恢复过程。本文将针对日志应用过程中涉及到的几个函数源码进行详细解析。

2024-12-25 19:34:15 880

原创 海山数据库(He3DB)源码详解:海山Mysql 崩溃恢复(2)-日志解析

MySQL redo日志崩溃恢复整体流程如图所示,本文将针对日志解析过程中涉及到的几个函数源码进行详细解析。

2024-12-25 19:33:15 775

原创 海山数据库(He3DB)源码详解:海山Mysql 崩溃恢复(1)-准备及结束

选取最近发生的那次checkpoint的信息。衡量checkpoint发生时间早晚的信息就是所谓的,只要把和这两个block中的值读出来比一下大小,哪个的值更大,说明哪个block存储的就是最近的一次checkpoint信息。这样就能拿到最近发生的checkpoint对应的值以及它在redo日志文件组中的偏移量。为什么要把checkpoint信息存储到2个block中?万一就在某次写checkpoint信息的过程中MySQL崩溃了,有可能导致正在写入的这个block中的checkpoint信息不正确。

2024-12-25 19:32:13 625

原创 海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesUpdate函数

海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesUpdate函数本文介绍了事务执行过程中,检查一个Update元组是否对当前事务可见,用于确保事务可以看到正确的数据版本。

2024-12-25 19:31:08 1024

原创 海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesToast函数

海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesToast函数本文介绍了事务执行过程中,检查一个Toast元组是否对当前事务可见,用于确保事务可以看到正确的数据版本。

2024-12-25 19:30:09 240

原创 海山数据库(He3DB)源码解读:T_GrantStmt原理浅析

(一)  GrantStmt 是一个表示 GRANT 或 REVOKE 语句的结构体。该结构体用于存储和处理对数据库对象权限的授予或撤销信息。。用于标识该节点的类型,通常在抽象语法树(AST)中用于区分不同节点的类型。布尔值,指示该操作是 GRANT(true)还是 REVOKE(false)。表示授权目标的类型,通常可能是角色、数据库、表等。该类型可能是枚举类型,具体定义在某个头文件中。表示被操作对象的类型,比如表、视图、序列等,这通常是一个枚举类型。

2024-12-25 19:29:08 533

原创 海山数据库(He3DB)源码解读:T_DropRoleSetStmt原理浅析

(一)  DropRoleStmt 是一个结构体,定义在 He3DB中,用于表示删除角色的 SQL 命令。*/这是一个枚举类型,表示节点类型。NodeTag 通常用于区分不同的 SQL 语句类型或查询树中的不同节点类型。对于 DropRoleStmt,这个字段通常会被设置为 T_DropRoleStmt,表示这是一个删除角色的语句。这是一个链表(List),包含了要删除的角色的名称列表。每个角色名称通常是一个字符串(char *),表示要删除的角色。

2024-12-25 19:28:07 610

原创 海山数据库(He3DB)源码解读:T_AlterRoleSetStmt原理浅析

(一)  AlterRoleSetStmt 是一个用于表示“ALTER ROLE … SET”语句的语法树节点的结构体。这种结构体通常在 He3DB 的解析和执行过程中使用,以处理 ALTER ROLE 命令。/* role */用于标识节点的类型。这是一个通用字段,能帮助 PostgreSQL 识别语法树中的各种节点类型。指向一个 RoleSpec 结构,该结构包含了要修改的角色的信息。RoleSpec 通常包含角色名和角色的其他细节(如是否是一个用户或组角色)。

2024-12-25 19:27:05 655

原创 大云海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesSelf函数

海山数据库(He3DB)源码详解:MVCC可见性HeapTupleSatisfiesSelf函数本文介绍了事务执行过程中,检查一个堆元组是否对当前事务可见,用于确保事务可以看到正确的数据版本。

2024-12-25 19:26:04 911

原创 大云海山数据库(He3DB)源码详解:He3DB-SubTrans日志管理器函数之SubTransSetParent

本文基于大云He3DB,针对SubTrans日志管理模块进行源码解读分享。函数名作用在子事务日志中记录父事务id。

2024-12-25 19:25:01 542

原创 大云海山数据库(He3DB)源码详解:He3DB-SubTrans日志管理器函数之SubTransGetParent、SubTransGetTopmostTransaction

函数名作用获取目标事务的父事务id获取给定TransactionId的顶层事务ID。

2024-12-25 19:23:54 918

原创 大云海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数之TransactionIdGetStatus

函数名作用实现CLOG日志的读操作。

2024-12-25 19:22:54 470

原创 海山数据库(He3DB)源码详解:CHECK过程

在 PostgreSQL 中,标签与执行检查点(checkpoint)操作相关。CHECKPOINT命令会强制数据库进行一次检查点操作,这个操作会更新所有数据文件,以确保事务日志中的信息被刷新到磁盘上,保证数据的持久性。

2024-11-26 13:50:00 1008

原创 海山数据库(He3DB)源码详解:海山MySQL redo日志-日志文件组

1、日志文件组MySQL的数据目录下默认有两个名为和的文件,log buffer中的日志默认情况下就是刷新到这两个磁盘文件中。redo从上边的描述中可以看到,磁盘上的redo日志文件不只一个,而是以一个日志文件组的形式出现的。这些文件以ib_logfile[数字](数字可以是0、1、2…)的形式进行命名。

2024-11-22 14:14:48 850

原创 海山数据库(He3DB)源码详解:海山MySQL redo日志-写入过程

一、redo log block设计InnoDB时为了更好的进行系统奔溃恢复,将通过mtr生成的redo日志放在大小为512字节的页中。为了和表空间中的页做区别,于是把用来存储redo日志的页称为block。一个的示意图如下:真正的redo日志都是存储到占用496字节大小的中。另外,占12个字节,占4个字节,存储的是一些管理信息。其中,

2024-11-22 14:13:59 970

原创 海山数据库(He3DB)源码详解:海山MySQL redo日志-MTR

一、对底层页面中的一次原子访问的过程称之为一个,简称mtr。一个事务可以包含若干条语句,每一条语句其实是由若干个mtr组成,每一个mtr又可以包含若干条redo日志。

2024-11-22 14:13:08 565

原创 海山数据库(He3DB)源码详解:主备复制read_backup_label

在数据库主备复制(如PostgreSQL的流复制等场景)中,时间点恢复是一种数据库恢复技术,它允许将数据库恢复到指定的历史时间点。周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师成功完成,则函数返回true,表示成功读取并解析了文件周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。

2024-11-15 22:46:03 914

原创 海山数据库(He3DB)源码详解:主备复制pg_wal_replay_resume

周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。

2024-11-15 22:45:08 907

原创 海山数据库(He3DB)源码解读:T_GrantRoleStmt原理浅析

(一)  GrantRoleStmt 是一个结构体,用于在 PostgreSQL 中表示授予或撤销角色的语句。类型: NodeTag解释: NodeTag 是一个枚举类型,表示不同类型的节点。在这里,type 用于标识这是一个 GrantRoleStmt 节点。通常,type 的值为 T_GrantRoleStmt。类型: List *解释: 这是一个链表(List),包含了将被授予或撤销的角色列表。每个元素是一个角色名称或角色标识符。这个变量指定了要操作的角色。

2024-11-15 22:44:13 696

原创 海山数据库(He3DB)源码解读:T_CreateRoleStmt原理浅析

(一)  CreateRoleStmt 是 He3DB 中用于表示创建角色 (CREATE ROLE) 语句的结构体。它包含了与角色创建相关的各种信息,包括角色类型、角色名称和角色选项。NodeTag type 这个成员用于标识结构体的类型。在 He3DB 的抽象语法树 (AST) 中,每个节点都有一个类型标识符(NodeTag),用于区分不同类型的节点。CreateRoleStmt 会被标记为其特定的类型,以便在AST中进行正确的处理。ROLESTMT_ROLE,//表示一般的角色声明。

2024-11-15 22:43:18 810

原创 海山数据库(He3DB)源码解读:T_AlterRoleStmt原理浅析

(一)  AlterRoleStmt 是一个用于定义 He3DB 中 ALTER ROLE 命令语法的数据结构。它是一个结构体,包含了执行 ALTER ROLE 操作所需的所有信息。/* role */NodeTag type: 这是一个枚举类型,用于标识该结构体是哪种节点类型。NodeTag 通常用于区分不同的 SQL 语句类型。RoleSpec *role: 这是一个指向 RoleSpec 结构体的指针,表示要修改的角色。RoleSpec 结构体可能包含角色的名称或其他标识信息。

2024-11-15 22:42:25 769

原创 海山数据库(He3DB)源码解读:SubBegin-Rollback

海山数据库(He3DB)源码详解:子事务块内核函数执行过程本文介绍了子事务执行过程中,从SAVEPOINT定义子事务开始到子事务结束释放RELEASE或者回滚ROLLBACK To的内核函数执行过程。

2024-11-15 22:41:32 838

原创 海山数据库(He3DB)源码解读:BEGIN-END-ABORT

事务SQL语句的执行过程,会先通过事务块函数修改事务块状态,然后根据事务块状态执行不同的事务行为。因此,本章会讲解事务块的开始和结束过程的事务块函数。

2024-11-15 22:40:41 749

原创 海山数据库(He3DB)源码解读:2PC

两阶段提交(2PC)是一种用于分布式系统的事务处理协议,旨在确保事务的原子性。以下是2PC从事务准备到提交或放弃的执行流程图:开始:事务发起者(协调者)开始一个新的分布式事务。事务发起者请求所有参与者准备:协调者向所有参与者发送准备请求,询问它们是否准备好提交事务。所有参与者是否准备好?:这是一个决策点,需要等待所有参与者的响应。是:如果所有参与者都准备好了,协调者将发送提交请求。否:如果任何一个参与者没有准备好,协调者将发送放弃请求。事务发起者发送提交请求。

2024-11-15 22:39:48 551

原创 大云海山数据库(He3DB)源码详解:主备复制-流复制

在数据库中,是一种数据库复制技术,它允许一主多从的数据库集簇实现实时数据复制和同步。周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。

2024-11-15 22:38:53 701

原创 海山数据库(He3DB)源码详解:子事务块内核函数执行过程

本文介绍了子事务执行过程中,从SAVEPOINT定义子事务开始到子事务结束释放RELEASE或者回滚ROLLBACK To的内核函数执行过程。

2024-11-08 14:14:51 936

原创 海山数据库(He3DB)源码详解:事务块执行过程及内核函数

事务SQL语句的执行过程,会先通过事务块函数修改事务块状态,然后根据事务块状态执行不同的事务行为。因此,本章会讲解事务块的开始和结束过程的事务块函数。

2024-11-08 14:13:59 1001

原创 海山数据库(He3DB)源码详解:两阶段提交(2PC)事务块内核函数执行过程

两阶段提交(2PC)是一种用于分布式系统的事务处理协议,旨在确保事务的原子性。graph TDA[开始] --> B[事务发起者请求所有参与者准备]B --> C{所有参与者是否准备好?C -- 是 --> D[事务发起者发送提交请求]C -- 否 --> E[事务发起者发送放弃请求]D --> F{所有参与者是否同意提交?F -- 是 --> G[所有参与者提交事务]F -- 否 --> H[所有参与者放弃事务]E --> I[所有参与者放弃事务]G --> J[事务提交完成]

2024-11-08 14:13:09 634

原创 海山数据库(He3DB)源码解读:T_GrantRoleStmt原理浅析

(一)  GrantRoleStmt 是一个结构体,用于在 PostgreSQL 中表示授予或撤销角色的语句。类型: NodeTag解释: NodeTag 是一个枚举类型,表示不同类型的节点。在这里,type 用于标识这是一个 GrantRoleStmt 节点。通常,type 的值为 T_GrantRoleStmt。类型: List *解释: 这是一个链表(List),包含了将被授予或撤销的角色列表。每个元素是一个角色名称或角色标识符。这个变量指定了要操作的角色。

2024-11-08 14:12:20 667

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除