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

海山数据库(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的研发。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值