<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[He3DB_ht的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/He3DB_ht</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; He3DB_ht]]></copyright><item><title><![CDATA[海山数据库(He3DB)源码详解：海山PG 表和元组的组织方式（2）]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324886</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324886</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:51:19 +0800</pubDate><description><![CDATA[访问Page时会先将它加载到内存，所以Page可以仅用一个char *类型的指针来表示，指向内存中该Page的起始位置。由于Page的大小是已知的，通过Page指针和Page的大小即可表示并访问一个Page。在构建一个Page时，会调用PageInit函数进行初始化。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：海山PG 表和元组的组织方式（1）]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324862</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324862</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:50:16 +0800</pubDate><description><![CDATA[PostgreSQL是一种开源的关系型数据库管理系统，具有强大的功能和可靠性。在PostgreSQL数据库中，表和元组是数据组织的基础单元。其中，表是PG数据库中存储数据的逻辑结构，由多个列（Column）和行（Row）组成。列代表了数据字段，而行则代表了一条条的数据记录。每个表都有其独特的属性，如主键（）、外键（）、索引（Index）等。主键用于唯一标识表中的一条记录，外键用于建立表与表之间的关联，索引则用于提高查询效率。在PostgreSQL中，元组通常指的是表中的一行数据，即一条记录。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：海山Mysql 自动测试框架MTR]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324840</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324840</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:49:15 +0800</pubDate><description><![CDATA[在修改内核代码后，不仅需要测试新增功能，同时也要对原有功能做回归测试，以保证新加代码对原有功能没有影响，这就需要用到MySQL源码自带的测试框架，简称MTR。主要应用于MySQL等相关数据库项目开发测试，对单个功能点或者模块进行正确性和功能性测试，该工具在SQL级别对MySQL进行单元测试。不仅仅能测试SQL语句，也能根据实际需要测试不同启动参数配置的MySQL服务器和客户端从而验证指定的功能逻辑。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：ResourceOwnerData及ResourceArray结构体解析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324814</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324814</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:48:14 +0800</pubDate><description><![CDATA[本文介绍了事务执行过程中，检查一个堆元组是否对当前事务可见，用于确保事务可以看到正确的数据版本。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：RecordTransactionCommit 函数解读]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324792</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324792</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:47:13 +0800</pubDate><description><![CDATA[是 PostgreSQL 中用于记录事务提交的关键函数。它负责在事务结束时执行一系列操作，包括日志记录、清理资源、更新事务状态等。这个函数是 PostgreSQL 事务提交机制的核心部分，确保事务的原子性和持久性。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：MemoryContextData及MemoryContextMethods结构体解析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324776</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324776</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:46:12 +0800</pubDate><description><![CDATA[内存上下文是 PostgreSQL 的内存管理机制，用于高效地分配和释放内存，支持嵌套内存上下文，并允许在事务或函数结束时批量释放内存。等）都有自己的实现方式，这些函数指针提供了一种统一的接口，允许通过多态的方式操作不同的内存上下文。这种设计使得 PostgreSQL 的内存管理机制既灵活又高效，能够适应多种内存分配策略和应用场景。这种设计使得 PostgreSQL 的内存管理机制既灵活又高效，能够适应复杂的内存分配和释放需求。是 PostgreSQL 中定义的一组函数指针，用于实现内存上下文（]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)查询解析模块解析（一）：词法分析scan.l解析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324744</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324744</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:45:09 +0800</pubDate><description><![CDATA[本文介绍了词法分析的基本原理，海山数据库使用的lex词法分析工具，并对scan.l文件进行了解析，在后文中将进一步解析词法分析，并梳理sql命令是如何经过词法和语法分析转化为一颗分析树。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)查询解析模块分析（二）：语法分析gram.y解析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324718</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324718</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:44:07 +0800</pubDate><description><![CDATA[定义段可分为代码段和声明部分，代码段由%{和%}%{/**/do { \else \%}%pure-parser //纯解析器，不依赖于全局变量或静态变量，而是通过参数传递和返回值来管理状态%expect 0 //希望冲突数量为0%name-prefix="base_yy" //代表生成的函数和变量前缀从yy变成base_yy%locations声明段中的union来声明所有表示符号的可能c类型，将标识符和C语言中定义的类型对应起来。]]></description><category></category></item><item><title><![CDATA[大云海山数据库(He3DB)源码详解：He3DB-SimpleLruReadPage_ReadOnly]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324695</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324695</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:43:06 +0800</pubDate><description><![CDATA[本文基于大云He3DB，针对SimpleLruReadPage_ReadOnly进行源码解读分享。这个函数的主要逻辑是：尝试在共享锁下快速查找页面。如果找到页面，更新统计信息并返回槽位编号。如果未找到页面，切换到独占锁并调用常规读取函数。通过这种方式，函数尽量减少锁的冲突，提高读取效率。]]></description><category></category></item><item><title><![CDATA[大云海山数据库(He3DB)源码详解：He3DB-SimpleLruReadPage]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324666</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324666</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:42:05 +0800</pubDate><description><![CDATA[本文基于大云He3DB，针对SimpleLruReadPage进行源码解读分享。函数名作用SimpleLruReadPage 函数的作用是从 SLRU 缓冲区中读取一个页面。它通过以下步骤实现：检查页面是否已在内存中。如果页面正在被读取或写入，等待 I/O 完成。如果页面不在内存中，选择一个空闲槽位。从磁盘读取页面数据到槽位。更新页面状态并返回槽号。]]></description><category></category></item><item><title><![CDATA[大云海山数据库(He3DB)源码详解：He3DB-MultiXactIdCreateFromMembers]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324647</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/145324647</guid><author>He3DB_ht</author><pubDate>Thu, 23 Jan 2025 15:41:02 +0800</pubDate><description><![CDATA[本文基于大云He3DB，针对MultiXactIdCreateFromMembers 进行源码解读分享。MultiXactIdCreateFromMembers 函数的主要逻辑如下：检查本地缓存中是否已经存在相同的成员集合，避免重复创建。验证成员中是否只有一个更新事务，确保多事务的合法性。分配新的 MultiXactId 和偏移量。创建 XLOG 记录，描述新创建的多事务。将多事务信息写入 OFFSET 和 MEMBER 日志文件。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：海山Mysql 崩溃恢复（3）-日志应用]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724807</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724807</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:47:48 +0800</pubDate><description><![CDATA[为崩溃恢复的入口函数，其从调用，传入参数读取存在系统表空间的获得的，该函数在日志解析、日志应用等线程创建之前，进行崩溃恢复操作。MySQLredo日志崩溃恢复整体流程如图所示，其中，日志应用的流程主要集中在右边部分，用于解析或应用日志记录体，用于恢复页面函数，这是应用日志记录到数据库页面的关键步骤。图中还显示了日志解析和日志应用流程之间的交互，特别是在解析日志记录后，如何将它们应用到数据库页面以完成恢复过程。本文将针对日志应用过程中涉及到的几个函数源码进行详细解析。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：海山Mysql 崩溃恢复（2）-日志解析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724788</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724788</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:46:46 +0800</pubDate><description><![CDATA[MySQL redo日志崩溃恢复整体流程如图所示，本文将针对日志解析过程中涉及到的几个函数源码进行详细解析。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：海山Mysql 崩溃恢复（1）-准备及结束]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724762</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724762</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:45:42 +0800</pubDate><description><![CDATA[选取最近发生的那次checkpoint的信息。衡量checkpoint发生时间早晚的信息就是所谓的，只要把和这两个block中的值读出来比一下大小，哪个的值更大，说明哪个block存储的就是最近的一次checkpoint信息。这样就能拿到最近发生的checkpoint对应的值以及它在redo日志文件组中的偏移量。为什么要把checkpoint信息存储到2个block中？万一就在某次写checkpoint信息的过程中MySQL崩溃了，有可能导致正在写入的这个block中的checkpoint信息不正确。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：MVCC可见性HeapTupleSatisfiesUpdate函数]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724729</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724729</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:44:38 +0800</pubDate><description><![CDATA[海山数据库(He3DB)源码详解：MVCC可见性HeapTupleSatisfiesUpdate函数本文介绍了事务执行过程中，检查一个Update元组是否对当前事务可见，用于确保事务可以看到正确的数据版本。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码详解：MVCC可见性HeapTupleSatisfiesToast函数]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724695</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724695</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:43:28 +0800</pubDate><description><![CDATA[海山数据库(He3DB)源码详解：MVCC可见性HeapTupleSatisfiesToast函数本文介绍了事务执行过程中，检查一个Toast元组是否对当前事务可见，用于确保事务可以看到正确的数据版本。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码解读：T_GrantStmt原理浅析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724672</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724672</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:42:23 +0800</pubDate><description><![CDATA[(一)  GrantStmt 是一个表示 GRANT 或 REVOKE 语句的结构体。该结构体用于存储和处理对数据库对象权限的授予或撤销信息。。用于标识该节点的类型，通常在抽象语法树（AST）中用于区分不同节点的类型。布尔值，指示该操作是 GRANT（true）还是 REVOKE（false）。表示授权目标的类型，通常可能是角色、数据库、表等。该类型可能是枚举类型，具体定义在某个头文件中。表示被操作对象的类型，比如表、视图、序列等，这通常是一个枚举类型。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码解读：T_DropRoleSetStmt原理浅析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724650</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724650</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:41:23 +0800</pubDate><description><![CDATA[(一)  DropRoleStmt 是一个结构体，定义在 He3DB中，用于表示删除角色的 SQL 命令。*/这是一个枚举类型，表示节点类型。NodeTag 通常用于区分不同的 SQL 语句类型或查询树中的不同节点类型。对于 DropRoleStmt，这个字段通常会被设置为 T_DropRoleStmt，表示这是一个删除角色的语句。这是一个链表（List），包含了要删除的角色的名称列表。每个角色名称通常是一个字符串（char *），表示要删除的角色。]]></description><category></category></item><item><title><![CDATA[海山数据库(He3DB)源码解读：T_AlterRoleSetStmt原理浅析]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724631</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724631</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:40:18 +0800</pubDate><description><![CDATA[(一)  AlterRoleSetStmt 是一个用于表示“ALTER ROLE … SET”语句的语法树节点的结构体。这种结构体通常在 He3DB 的解析和执行过程中使用，以处理 ALTER ROLE 命令。/* role */用于标识节点的类型。这是一个通用字段，能帮助 PostgreSQL 识别语法树中的各种节点类型。指向一个 RoleSpec 结构，该结构包含了要修改的角色的信息。RoleSpec 通常包含角色名和角色的其他细节（如是否是一个用户或组角色）。]]></description><category></category></item><item><title><![CDATA[大云海山数据库(He3DB)源码详解：MVCC可见性HeapTupleSatisfiesSelf函数]]></title><link>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724608</link><guid>https://blog.youkuaiyun.com/He3DB_ht/article/details/144724608</guid><author>He3DB_ht</author><pubDate>Wed, 25 Dec 2024 17:39:12 +0800</pubDate><description><![CDATA[海山数据库(He3DB)源码详解：MVCC可见性HeapTupleSatisfiesSelf函数本文介绍了事务执行过程中，检查一个堆元组是否对当前事务可见，用于确保事务可以看到正确的数据版本。]]></description><category></category></item></channel></rss>