- 博客(120)
- 收藏
- 关注
原创 海山数据库(He3DB)源码详解:主备复制read_backup_label
在数据库主备复制(如PostgreSQL的流复制等场景)中,时间点恢复是一种数据库恢复技术,它允许将数据库恢复到指定的历史时间点。周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。
2024-11-29 15:00:06
684
原创 海山数据库(He3DB)源码详解:主备复制pg_wal_replay_resume
周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。
2024-11-29 14:59:30
563
原创 海山数据库(He3DB)源码详解:海山MySQL redo日志-写入过程
设计InnoDB时为了更好的进行系统奔溃恢复,将通过mtr生成的redo日志放在大小为512字节的页中。为了和表空间中的页做区别,于是把用来存储redo日志的页称为block。一个的示意图如下:真正的redo日志都是存储到占用496字节大小的中。另外,占12个字节,占4个字节,存储的是一些管理信息。其中,
2024-11-29 14:58:48
810
原创 海山数据库(He3DB)源码详解:海山MySQL redo日志-日志文件组
MySQL的数据目录下默认有两个名为和的文件,log buffer中的日志默认情况下就是刷新到这两个磁盘文件中。redo从上边的描述中可以看到,磁盘上的redo日志文件不只一个,而是以一个日志文件组的形式出现的。这些文件以ib_logfile[数字](数字可以是0、1、2…)的形式进行命名。在将redo日志写入日志文件组时,是从ib_logfile0开始写,如果ib_logfile0写满了,就接着ib_logfile1写,同理,ib_logfile1写满了就去写ib_logfile2,依此类推。
2024-11-29 14:58:18
412
原创 海山数据库(He3DB)源码详解:海山MySQL redo日志-MTR
如果作为内节点的页a的剩余空闲空间也不足以容纳增加一条目录项记录,那需要继续做内节点页a的分裂操作,也就意味着会修改更多的页面,从而产生更多的redo日志。一个事务可以包含若干条语句,每一条语句其实是由若干个mtr组成,每一个mtr又可以包含若干条redo日志。在事务执行过程中,每条语句作为一个mtr来执行。而在执行语句的过程中产生的redo日志被划分成了若干个。它根据事务日志的模式(m_log_mode)来决定如何处理日志写入。所谓原子操作即要么全部成功,要么全部失败,不存在中间状态。
2024-11-29 14:58:01
590
原创 海山数据库(He3DB)源码解读:T_GrantRoleStmt原理浅析
(一) GrantRoleStmt 是一个结构体,用于在 PostgreSQL 中表示授予或撤销角色的语句。类型: NodeTag解释: NodeTag 是一个枚举类型,表示不同类型的节点。在这里,type 用于标识这是一个 GrantRoleStmt 节点。通常,type 的值为 T_GrantRoleStmt。类型: List *解释: 这是一个链表(List),包含了将被授予或撤销的角色列表。每个元素是一个角色名称或角色标识符。这个变量指定了要操作的角色。
2024-11-29 14:55:17
560
原创 海山数据库(He3DB)源码解读:T_CreateRoleStmt原理浅析
(一) CreateRoleStmt 是 He3DB 中用于表示创建角色 (CREATE ROLE) 语句的结构体。它包含了与角色创建相关的各种信息,包括角色类型、角色名称和角色选项。NodeTag type 这个成员用于标识结构体的类型。在 He3DB 的抽象语法树 (AST) 中,每个节点都有一个类型标识符(NodeTag),用于区分不同类型的节点。CreateRoleStmt 会被标记为其特定的类型,以便在AST中进行正确的处理。ROLESTMT_ROLE,//表示一般的角色声明。
2024-11-29 14:54:15
528
原创 海山数据库(He3DB)源码解读:T_AlterRoleStmt原理浅析
(一) AlterRoleStmt 是一个用于定义 He3DB 中 ALTER ROLE 命令语法的数据结构。它是一个结构体,包含了执行 ALTER ROLE 操作所需的所有信息。/* role */NodeTag type: 这是一个枚举类型,用于标识该结构体是哪种节点类型。NodeTag 通常用于区分不同的 SQL 语句类型。RoleSpec *role: 这是一个指向 RoleSpec 结构体的指针,表示要修改的角色。RoleSpec 结构体可能包含角色的名称或其他标识信息。
2024-11-29 14:53:44
794
原创 大云海山数据库(He3DB)源码详解:主备复制-流复制
在数据库中,是一种数据库复制技术,它允许一主多从的数据库集簇实现实时数据复制和同步。周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师海山数据库(He3DB)源码详解:海山PG 空闲空间映射表FSM周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。
2024-11-29 14:53:24
981
原创 大云海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数之WriteZeroPageXlogRec、CheckPointCLOG
函数作用创建一个新CLOG日志页面时,调用该函数创建一条ZEROPAGE的XLOG日志记录,以记录所创建CLOG日志页面的页面号,方便系统崩溃或恢复过程中重建CLOG日志。
2024-11-29 14:50:40
868
原创 SubBegin-Rollback
本文介绍了子事务执行过程中,从SAVEPOINT定义子事务开始到子事务结束释放RELEASE或者回滚ROLLBACK To的内核函数执行过程。
2024-11-29 14:49:55
807
原创 CHECK过程
在 PostgreSQL 中,标签与执行检查点(checkpoint)操作相关。CHECKPOINT命令会强制数据库进行一次检查点操作,这个操作会更新所有数据文件,以确保事务日志中的信息被刷新到磁盘上,保证数据的持久性。
2024-11-29 14:49:36
712
原创 BEGIN-END-ABORT
事务SQL语句的执行过程,会先通过事务块函数修改事务块状态,然后根据事务块状态执行不同的事务行为。因此,本章会讲解事务块的开始和结束过程的事务块函数。
2024-11-29 14:46:15
772
原创 海山数据库(He3DB)源码详解:两阶段提交(2PC)事务块内核函数执行过程
两阶段提交(2PC)是一种用于分布式系统的事务处理协议,旨在确保事务的原子性。graph TDA[开始] --> B[事务发起者请求所有参与者准备]B --> C{所有参与者是否准备好?C -- 是 --> D[事务发起者发送提交请求]C -- 否 --> E[事务发起者发送放弃请求]D --> F{所有参与者是否同意提交?F -- 是 --> G[所有参与者提交事务]F -- 否 --> H[所有参与者放弃事务]E --> I[所有参与者放弃事务]G --> J[事务提交完成]
2024-11-29 14:45:40
881
原创 海山数据库(He3DB)源码详解_redo日志
redo日志即重做日志,记录了事务对数据库做了哪些修改。当发生数据库服务器宕机、或者脏页未写入磁盘,可以通过redo日志恢复。
2024-10-22 14:49:26
898
1
原创 海山数据库(He3DB)源码详解:子事务清理函数
李超,移动云数据库工程师,负责云原生数据库He3DB的研发。FAULT,恢复默状态;从事务链栈中弹出子事务,并将顶部事务状态修改为父节点状态。李超,移动云数据库工程师,负责云原生数据库He3DB的研发。
2024-10-22 14:48:52
605
原创 海山数据库(He3DB)源码详解:子事务的定义和启动(1)
子事务的创建过程分为两步,分别为通过DefineSavepoint函数调用PushTransaction构建一个子事务节点,并在CommitTransactionCommand函数中调用StartSubTransaction函数启动一个新的子节点事务在终端以事务块方式执行SQL命令,在事务块状态为TBLOCK_INPROGRESS或TBLOCK_SUBINPROGRESS时,终端执行SAVEPOINT语句,数据库底层会调用DefineSavepoint函数,创建子事务并通过链栈保存父节点。graph TB。
2024-10-22 14:48:22
870
原创 海山数据库(He3DB)源码详解:主备复制stop
周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师不是因为超时结束,那么从event结构体中获取触发的事件(),并返回该值。这个值包含了触发等待结束的具体事件信息,如表示闩锁被设置,WL_TIMEOUT表示超时等。但在这里,由于超时情况已经被单独处理,所以这里返回的更可能是闩锁被设置或其他在中注册的事件。else周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。
2024-10-22 14:47:34
722
原创 海山数据库(He3DB)源码详解:主备复制start
周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师都已完成**函数检查是否变为0。如果是,这意味着没有更多的备份正在运行,因此可以安全地禁用强制全页写入,函数将设置为 false释放WAL插入锁调用来释放WAL插入锁周雨慧 中移(苏州)软件技术有限公司 数据库内核开发工程师。
2024-10-22 14:45:57
885
原创 海山数据库(He3DB)源码详解:海山MySQL 事务隔离级别和MVCC
这两种隔离级别的事务在执行普通的SELECT操作时访问记录的版本链的过程,这样子可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。对该记录每次更新后,都会将旧值放到一条undo日志中,就算是该记录的一个旧版本,随着更新次数的增多,所有的版本都会被。如果找不到,表示该事务ID的修改是可见的;属性连接成一个链表,这个链表被称为版本链,版本链的头节点就是当前记录最新的值。已提交读和可重复读:需要判断一下版本链中的哪个版本是当前事务可见的。,表示没有特定的事务ID集合限制,因此修改是可见的。
2024-10-22 14:45:27
542
原创 海山数据库(He3DB)源码详解:海山MySQL undo日志
回滚(rollback):撤销对事务的操作,保证事务的原子性undo日志(undo log):记录回滚内容的文件。
2024-10-22 14:44:55
530
原创 海山数据库(He3DB)源码详解:set_status_by_pages
函数名作用根据给定的事务标识符数组(subxids),按照这些事务标识符对应的页面信息来设置页面状态设置页面状态用于记录函数开始用于记录函数结束。
2024-10-22 14:44:09
531
原创 海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数之TransactionIdSetTreeStatus
片转存中…(img-k8PNaFhI-1729577625879)]涉及到的宏函数与一致,不做赘述这个函数的主要作用是记录事务及其子事务树在提交日志中的最终状态,并且在该函数的调用栈关系中,和是第一层函数调用,其核心讲解内容将在后续进行。
2024-10-22 14:43:33
564
原创 海山数据库(He3DB)源码详解:CLOG-ShmemInit函数
函数名作用CLOG日式管理器的初始化,用于在共享内存中初始化CLOG缓冲池将CLOG页面初始化或者重新初始化为零用于创建和初始化共享内存以及信号量用于初始化或连接到共享内存中的一个简单最近最少使用(LRU)缓存用于计算CLOG缓存量buffers用于对页面的前置关系函数进行单元测试函数用于判断一个CLOG页面编号在截断操作中是否 “更旧”用于记录函数开始用于记录函数结束。
2024-10-22 14:43:01
819
原创 海山数据库(He3DB)源码解读:查询规划之预处理
下图大概的刻画了查询规划模块里主要的函数调用关系查询规划的最终目的是得到可被执行器执行的最优计划,整个过程可分为预处理生成路径和生成计划三个阶段。预处理阶段是对查询树(Query结构体)的进一步改造,这种改造可通过SQL语句体现。在此过程中,最重要的是提升子链接和提升子查询。生成路径阶段,接收到改造后的查询树后,采用动态规划算法或遗传算法,生成最优连接路径和候选的路径链表。生成计划。
2024-10-22 14:42:26
616
原创 海山数据库(He3DB)技术文档:计划器与执行器
He3DB是一个功能强大的开源关系型数据库管理系统,其查询处理过程可以分为几个主要阶段:解析、重写、规划(计划生成)、优化和执行。本文档将重点讨论计划器和执行器的设计,包括相关代码和结构体分析。
2024-10-22 14:41:14
364
原创 海山数据库(He3D)+AI(六):一种针对个性化需求的在线云数据库混合调优系统
使用机器学习的方法对云数据库进行参数调优具有较大的潜力,但是面对个性化的需求,预训练模型会出现无法匹配的问题,若使用在线学习的方法,则可能导致冷启动问题,导致较长的训练时间和性能波动。针对这些不足,本文带来SIGMOD的论文:HUNTER: An Online Cloud Database Hybrid Tuning System for Personalized Requirements,介绍一种针对个性需求在线云数据库的调优方法。
2024-10-22 14:40:43
849
原创 海山数据库(He3DB)源码详解:CommitSubTransaction函数
李超,移动云数据库工程师,负责云原生数据库He3DB的研发。弹出子事务节点。恢复事务状态为默认状态。调用PopTransaction()函数从事务链栈中弹出子事务节点。李超,移动云数据库工程师,负责云原生数据库He3DB的研发。
2024-09-24 16:45:45
603
1
原创 海山数据库(He3DB)源码详解:海山PG 空闲空间映射表FSM
FSM文件是Free Space Map(空闲空间映射)的缩写,用于跟踪和记录数据块(Page)中的空闲空间。随着数据表不断进行插入、更新和删除元组等操作,数据页内必然会存在空页空间。在插入新的元组时,有两种方式可以选择:直接选择新的页来存放、存放到已有页的空闲空间中。如果采用第一种存放方式,会明显造成空间利用率的浪费;
2024-09-24 16:18:22
769
原创 海山数据库(He3DB)源码详解:海山PG 可见性映射表VM
He3DB for PG中为了实现多版本并发控制,当事务删除或更新元组时,并非从物理上删除,而是将其标记为无效的方式进行标记删除,最终对这些无效元组的清理操作需要调用VACUUM完成。为了能够加快VACUUM查找包含无效元组的文件块的过程,在PostgreSQL8.4.1中为每个表文件定义了一个新的附属文件–可见性映射表(VM)。VM中为表的每个文件块设置了一位,用来标记该文件块是否存在无效元组。
2024-09-24 16:18:08
928
原创 海山数据库(He3DB)源码详解:海山PG 管理大型缓冲临时文件
Buffile.c文件是 PostgreSQL 存储系统中的一个组成部分,专注于管理和优化临时文件的读写操作。它提供了一种对虚拟文件(由fd.c管理)的缓冲输入/输出(I/O)支持,以提高性能并减少资源消耗。
2024-09-24 16:12:52
357
原创 海山数据库(He3DB)源码详解:RollbackToSavepoint函数
李超,移动云数据库工程师,负责云原生数据库He3DB的研发。RT,将事务块状态修改为TBLOCK_SUBABORT_RESTART;3. 如果临时变量xact的事务块状态为其他状态,则提交FATAL日志;完成RollbackToSavepoint函数。李超,移动云数据库工程师,负责云原生数据库He3DB的研发。
2024-09-24 16:10:49
1069
原创 海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数之clog_redo
然而,在clog记录的情况下,这种备份机制不是必需的,因为clog本身就是一种记录事务更改的机制。定义了用于存储从 WAL记录中读取的截断信息的数据结构。包含要截断到的最旧事务ID(备份块:为了保持数据的一致性,在更改实际数据之前先对其进行备份的块。确保当前的CLOG记录不使用备份块(Backup blocks)该结构体包含了当前正在处理的WAL记录的信息。进行位与操作来清除一些不需要的位,结果存储在。)和要截断的页面编号(pageno)等。中获取WAL记录的信息,并通过与。,则记录一个致命错误。
2024-09-24 16:10:11
361
原创 海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数(2)
本文主要针对海山数据库中CLOG日志管理器部分关键函数源码进行研读。主要涉及ExtendCLOG、TruncateCLOG。
2024-09-24 16:09:31
399
原创 海山数据库(He3DB)源码详解:He3DB-CLOG日志管理器函数(1)
本文主要针对海山数据库中CLOG日志管理器部分关键函数源码进行研读。主要涉及BootStrapCLOG、StartupCLOG。
2024-09-24 16:08:10
292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人