事务机制源码解析| 事务并发控制(1)

事务并发控制机制用来保证并发执行事务的情况下openGauss的ACID特性。下面将逐一介绍事务并发控制的各组成部分。

5.2.1 事务状态机

openGauss将事务系统分为上层(事务块TBlockState)以及底层(TransState)两个层次。
通过分层的设计,在处理上层业务时可以屏蔽具体细节,实现灵活支持客户端各类事务执行语句(BEGIN/START TRANSACTION/COMMIT/ROLLBACK/END)。
(1) 事务块TBlockState:客户端query的状态,用于提高用户操作数据的灵活性,用事务块的形式支持在一个事务中执行多条query语句。
(2) 底层事务TransState:内核端视角,记录了整个事务当前处于的具体状态。

1. 事务上层状态机
事务块上层状态机结构体代码如下:

{ /* 不在事务块中的状态:单条SQL语句 */ TBLOCK_DEFAULT,/* 事务块缺省状态 */ TBLOCK_STARTED,/*执行单条query 语句*/ /* 处于事务块中的状态:一个事务包含多条语句 */ TBLOCK_BEGIN,/* 遇到事务开始命令BEGIN/START TRANSACTION */ TBLOCK_INPROGRESS,/* 表明正在事务块处理过程中*/ TBLOCK_END,/ *遇到事务结束命令END/COMMIT */ TBLOCK_ABORT,/* 事务块内执行报错,等待客户端执行ROLLBACK */ TBLOCK_ABORT_END,/ *在事务块内执行报错后,接收客户端执行ROLLBACK */ TBLOCK_ABORT_PENDING,/* 事务块内执行成功,接收客户端执行ROLLBACK(期望事务回滚)*/ TBLOCK_PREPARE,/ *两阶段提交事务,收到PREPARE TRANSACTION命令*/ /* 子事务块状态,与上述事务块状态类似 */ TBLOCK_SUBBEGIN,/* 遇到子事务开始命令SAVEPOINT */ TBLOCK_SUBINPROGRESS,/* 表明正在子事务块处理过程中*/ TBLOCK_SUBRELEASE,/* 遇到子事务结束命令RELEASE SAVEPOINT */ TBLOCK_SUBCOMMIT,/* 遇到事务结束命令END/COMMIT 从最底层的子事务递归的提交到最顶层事务*/ TBLOCK_SUBABORT,/* 子事务块内执行报错,等待客户端ROLLBACK TO/ROLLBACK */ TBLOCK_SUBABORT_END,/* 在子事务块内执行报错后,接收到客户端ROLLBACK TO上层子事务/ROLLBACK */ TBLOCK_SUBABORT_PENDING,/* 子事务块内执行成功,接收客户端执行的ROLLBACK TO上层子事务/ROLLBACK */ TBLOCK_SUBRESTART,/* 子事务块内执行成功,收到ROLLBACK TO当前子事务*/ TBLOCK_SUBABORT_RESTART/* 子事务块内执行报错后,接收到ROLLBACK TO当前子事务*/ } TBlockState;