postgresql Two-phase commit

本文详细介绍了PostgreSQL中两阶段提交的过程和技术实现细节,包括全局事务标识符(GID)的概念,以及preparetransaction和commitprepared命令的具体操作流程。

对于XA的支持,pg目前没明确提出来,只是实现了两阶段提交,

 

XID这个名词已被占用,所以提出了GID a global transaction identifier

 

create table a(a int);

 

begin;

 

insert a values(1);

 

prepare transaction 'aaa';

 

commit prepared 'aaa';

 

rollback prepared 'aaa';

 

目前支持这样的语法,'aaa' 就是GID,具体见下

http://www.postgresql.org/docs/current/static/sql-prepare-transaction.html

 

 

 

下面是全局事务的定义,就是比局部事务上多了几个变量,是专门的一个列表,和普通事务的不一样

 

 

 

 

 

 

在 prepare transaction 的时候,在数据库的目录的 pg_twophase 文件夹生成state file,文件名为事务的XID, 

 

 

 

 

 

 

prepare transaction

 

要生成state file的主要原因是,在这一过程中,已完成了资源的释放,把不能释放的记录下来,以便commit时候释放

 

commit prepared

 

把state file读出来解析,接着释放资源,之后就是记录日志,并把state file删除

 

当在prepare transaction成功,之后系统挂掉,这时state file已创建成功,保留在硬盘上,当系统重启后,会根据日志和state file重构XA事物,在系统启动完成后,可以接着 commit prepared 或 rollback prepared 这个事物。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值