陈老师:1415968548 郑老师:2735197625 乐老师:354331153
客服热线:
19941464235 / 19906632509 / 19906733890 / 19905812933(微信同号)

客服微信

【PostgreSQL】pg中的两阶段提交

作者:炎燚小寶
发布时间:2024-06-20 09:13
浏览量:341

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。


一、两阶段概述

两阶段提交(Two-Phase Commit,2PC)是一种在分布式系统中确保事务原子性的协议。在PostgreSQL中,两阶段提交允许你创建一个预备事务,这个预备事务可以在一个或多个数据库之间进行提交或回滚,从而确保所有的数据库要么都提交事务,要么都不提交。

两阶段提交在PostgreSQL中的使用通常涉及以下步骤:

1. 准备事务:在PostgreSQL中,你可以通过`PREPARE TRANSACTION 'transaction_id';`命令来准备一个事务。这个命令会开始一个事务,但不会立即提交它。在这个阶段,所有的事务更改都会被保存,但还没有被最终提交。

2. 提交或回滚事务:一旦事务被准备好,你可以选择提交或回滚事务。如果你想提交事务,可以使用`COMMIT PREPARED 'transaction_id';`命令。如果你想回滚事务,可以使用`ROLLBACK PREPARED 'transaction_id';`命令。在这个阶段,所有的数据库都会同步执行相同的操作,从而确保事务的一致性。

请注意,两阶段提交协议是一种强一致性协议,它可能会影响系统的性能。在选择使用它时,需要权衡一致性和性能之间的关系。


二、两阶段提交实验

2.1 修改参数max_prepared_transactions


该参数必须重启才能生效,设置为10



2.2 创建表并开始事务


命令中“osdba global trans0001”是两阶段提交中全局事务的ID,由事务协调器生成(事务协调器也可能是由应用实现的,事务协调器会持久化这个全局事务ID.PostgreSQL数据库一旦 成功执行这条命令,就会把此事务持久化,意思是即使数据库重启,此事务既不会回滚,也不会丢失)。


2.3 重启pg


2.4 查看并提交


2.5 提交全局事务

从上面的例子可以看出,一旦成功执行“PREPARE TRANSACTION”命令,事务就会被持久化,即使重启数据库,仍然可以提交这个事务,事务中的操作不会丢失。



想了解更多PG相关的学习资料(技术文章和视频),可以微信公众号或B站搜索《云贝教育》,免费获取。

想了解更多PG相关的学习资料(技术文章和视频),可以微信公众号或B站搜索《云贝教育》,免费获取。

想了解更多PG相关的学习资料(技术文章和视频),可以微信公众号或B站搜索《云贝教育》,免费获取。


另外需要学习资料 的同学,可以添加联系方式:(同V) 陈老师 199-4146-4235 / 郑老师 199-0663-2509 / 蕾老师199-0663-5786,我们会持续更新学习视频。