栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PostgreSQL——事务分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PostgreSQL——事务分析

2021SC@SDUSC

目录

事务简介

事务块

上层事务

底层事务

 总结


事务简介

PostgreSQL作为开源的关系型数据库需要实现的一大功能是事务与并发处理机制,在源码分析中,我就负责分析这一部分。下面我想要浅谈postgreSQL中的事务概念以及大体的实现方法。

一次事务的要点就是它把多个步骤捆绑成了一个单一的操作。 其它并发的事务是看不到在这些步骤之间的中间状态的,并且如果发生了一些问题, 导致该事务无法完成,那么所有这些步骤都对数据库造不成任何影响。

PostgreSQL为每条事务创建一个postgre进程,并发执行事务。

在执行事务方面采用分层的机制:上层事务块和底层事务。上层事务块可以认为是在用户眼中的事务,用于控制事务执行的状态;底层事务可以认为是事务中的每条语句,可以改变上层事务块的状态。

事务块

上层事务

每个postgre进程只有一个事务块,上层事务块记录着本次事务执行过程中的各个状态。

typedef enum TBlockState

{

  

  TBLOCK_DEFAULT,       

  TBLOCK_STARTED,       

  

  TBLOCK_BEGIN,        

  TBLOCK_INPROGRESS,     

  TBLOCK_PARALLEL_INPROGRESS,

  TBLOCK_END,         

  TBLOCK_ABORT,        

  TBLOCK_ABORT_END,      

  TBLOCK_ABORT_PENDING,    

  TBLOCK_PREPARE,       

  

  TBLOCK_SUBBEGIN,      

  TBLOCK_SUBINPROGRESS,    

  TBLOCK_SUBRELEASE,     

  TBLOCK_SUBCOMMIT,      

  TBLOCK_SUBABORT,      

  TBLOCK_SUBABORT_END,    

  TBLOCK_SUBABORT_PENDING,  

  TBLOCK_SUBRESTART,     

  TBLOCK_SUBABORT_RESTART   

} TBlockState;

以下是网上查询可知的常见的事务块状态转换图

  • startTransactionCommand:事务块中每条语句执行前都会调用。
  • commitTransactionCommand:事务块中每条语句执行结束都会调用
  • abortCurrentTransaction:事务块中语句执行错误,在调用点调用
  • BeginTransactionBlock:遇见BEGIN命令调用,状态变为TBLOCK_BEGIN
  • EndTransactionBlock:遇见END调用,可能成功提交,也可能回滚
  • AbortTransactionBlock:遇见ABORT指令调用

底层事务

底层事务需要做的是执行每条命令,负责处理资源和锁的获取和释放,信号的处理,日志记录等等

typedef enum TransState

{

  TRANS_DEFAULT,       

  TRANS_START,        

  TRANS_INPROGRESS,      

  TRANS_COMMIT,        

TRANS_ABORT,        

  TRANS_PREPARE        

} TransState;

经过分析可得,主要有四个函数:

  • StartTransaction:由BEGIN的startTransactionCommand调用,调用结束后事务块状态为TBLOCK_STARTED
  • CommitTransaction:由END的commitTransactionCommand调用,提交事务
  • AbortTransaction和CleanupTransaction:释放资源,恢复默认状态

 总结

 此次初步分析了postgresql事务上的处理机制,对源码结构有了一个大概的理解。

欢迎批评指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/305839.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号