当前位置: 首页> 教育> 锐评 > 海山数据库(He3DB)源码详解:事务源码执行过程

海山数据库(He3DB)源码详解:事务源码执行过程

时间:2025/7/9 17:18:29来源:https://blog.csdn.net/weixin_42744640/article/details/141423561 浏览次数:0次

海山数据库(He3DB)源码详解:事务源码执行过程

本文介绍了He3DB数据库在DDL和DML操作过程中,两种事务在底层源码执行流程细节。

操作过程

1、启动数据库并进入GDB

  1. 首先,在终端A启动一个测试用的数据库test,并查看当前测试用的test数据库后台线程;
  2. 然后,在终端B利用ps指令查看后台进程,并利用gdb调试数据库对应线程。
    注意:这里是两个终端,一个执行数据库,一个执行GDB

在这里插入图片描述

2、打断点并查询数据库

  1. 在GDB中对事务操作函数和查询函数打断点,函数分别为:
    1. b StartTransactionCommand
    2. b StartTransaction
    3. b PortalRunSelect
    4. b CommitTransactionCommand
    5. b CommitTransaction
  2. 在数据库中执行SELECT语句;

在这里插入图片描述

3、事务开始

执行查询语句后,在GDB中查看源码,可以发现SELECT命令首先会执行StartTransactionCommand函数,并在switch-case结构中,根据事务块状态(s->blockState)选择要执行的下一步。

在这里插入图片描述

4、开始事务执行

根据当前事务块状态s->blockState = TBLOCK_DEFAULT,跳转执行StartTransaction函数。在StartTransaction函数会具体执行事务开始的相关操作,并先将事务状态从s->state = TRANS_DEFAULT改为s->state = TRANS_START,完成事务开始操作之后将事务设置为s->state = TRANS_INPROGRESS,退出返回StartTransactionCommand函数,并将事务块状态改为s->blockState = TBLOCK_START
在这里插入图片描述

5、执行事务查询

完成事务开始操作后,跳转到PortalRunSelect函数执行事务查询函数,并通过执行PushActiveSnapshotExecutorRunPopActiveSnapshot三个函数进行具体的事务查询操作。
在这里插入图片描述

6、事务提交

完成事务查询后,跳转到CommitTransactionCommand函数,并在switch-case结构中,根据事务块状态(s->blockState)选择要执行的下一步。
在这里插入图片描述

7、执行事务提交

根据当前事务块状态s->blockState = TBLOCK_START,执行CommitTransaction函数执行具体的事务提交操作。执行过程中,先将事务状态从s->state = TRANS_INPROGRESS改为s->state = TRANS_COMMIT,并在完成事务提交之后将事务状态重置为s->state = TRANS_DEFAULT

总结

可以看出,一个DDL或DML语句的完成执行过程,在源码底层中:
首先,要通过事务块操作函数判断事务块状态,来选择具体要执行的事务行为;
之后,通过对应的事务操作函数执行事务过程,包括事务开始StartTransaction、事务提交CommitTransaction、事务放弃AbortTransaction和事务清理CleanupTransaction

作者介绍

李超,移动云数据库工程师,负责云原生数据库He3DB的研发。

`。

作者介绍

李超,移动云数据库工程师,负责云原生数据库He3DB的研发。

关键字:海山数据库(He3DB)源码详解:事务源码执行过程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: