事务管理模块
- 事务管理器
- 日志管理器
- CLOG:事务的执行结果
- XLOG:undo/redo日志
- 锁管理器:实现并发控制,读阶段采用MVCC,写阶段采用锁控制实现不同的隔离级别。
- 日志管理器
基本概念
- 事务号:PostgreSQL给每个可能修改数据库中数据的事务分配一个事务号。事务号是一个32位的无符号数,可以比较大小,事务号大的事务是开始比较晚的事务。
- 事务的状态存储:
实现原理
PostgreSQL采用分层的机制执行事务,上层事务块和底层事务。上层事务块是用户眼中的事务,用于控制事务执行的状态;底层事务是事务中的每条语句,可以改变上层事务块的状态。
每个postgre进程只有一个事务块,上层事务块记录着本次事务执行过程中的各个状态。
typedef enum TBlockState
{
/* not-in-transaction-block states */
TBLOCK_DEFAULT, /* idle */
TBLOCK_STARTED, /* running single-query transaction */
/* transaction block st