0
点赞
收藏
分享

微信扫一扫

PostgreSQL数据库事务系统——2PC


在默认情况下,PostgreSQL没有打开两阶段提交的功能,能通过设置max_prepared_transactions参数为0来阻止用户开启两阶段提交事务,用户可以根据自己的需要,设置max_prepared_transactions参数的值来保证同时支持几个两阶段提交事务,PostgreSQL的两阶段提交事务的SQL接口如下。

SQL接口

说明

PREPARE TRANSACTION ‘gid’

两阶段提交事务的Prepare阶段

COMMIT PREPARED ‘gid’

如果第一个阶段决定提交事务,那么执行COMMIT PREPARED

ROLLBACK PREPARED ‘gid’

如果第一个阶段决定回滚事务,那么执行ROLLBACK PREPARED

当用户通过PREPARE TRANSACTION语句去开始一个两阶段提交操作时,PG会调用PrepareTransactionBlock函数,在这个函数中会阐释转换事务块的状态TBLOCK_PREPARE。
当语句结束时(当前command结束),CommitTransactionCommand函数会调用PrepareTransaction函数,这个函数会真正开始在共享内存建立一个全局事务,同时会将事务的资源信息写入磁盘(通过WAL及文件的方式)。此时,这个事务就和当前的Backend解除绑定,无论是退出当前会话还是重启PG,这个PREPARE的事务会一直存在,事务占用的资源也不会释放。


举报

相关推荐

0 条评论