POSTGRESQL PERPARE 事务提交方式,到底用还是不用

这篇具有很好参考价值的文章主要介绍了POSTGRESQL PERPARE 事务提交方式,到底用还是不用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共1100人左右 1 + 2 + 3)新人会进入3群

关于Prepare 提交事务的方式问题,有两个阵营,如爱之人,爱如子嗣拥入怀中,不爱之人,如弃置水中随波逐流。那么到底prepare事务的提交方式,到底应该不应该用,怎么用是一个开发应该知晓的问题,同时由于开发使用了prepare 提交事务,造成的问题,DBA 也应该知道如何处理。

先说第一个阵营,使用perpare的开发组,perpare 本身是一个预处理的事务的语句,将执行的语句的执行计划等内容进行固化到系统内

prepared transaction是独立于会话、抗崩溃、状态维护的事务。事务的状态存储在磁盘上,这使得数据库服务器即使在从崩溃中重新启动后也可以恢复事务。在对prepared transaction执行回滚或提交操作之前,将一直维护该事务,这个是官方的解释,也就是prepare 操作后,事务已经和数据库服务绑定。

在用户调用prepare transaction语句的情况下,会触发一个两阶段提交的工作,PG调用PrepareTransactionBlock函数,在这个函数中将perpare声明的事务状态进行TBLOCK_PREPARE ,相关的函数会开始在共享内存建立一个全局事务,同时会将事务的资源信息写入磁盘,这个事务和当前的backend接触绑定,无论当前推出会话,还是重启PG,Prepare 事务会一直存在,不会释放。

使用prepare transaction的优点是,在事务commit 前,数据库已经接受了事务。同时相关执行命令的方式也有所不同,在提交的情况下,采用SQL接口中,包含了

prepare transaction 'gid'

commit prepared 'gid'

rollback prepared 'gid'

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

上图为在进行事务工作中,产生的问题,prepare transaction 无法进行工作,主要在于默认POSTGRESQL 是关闭prepare transaction的功能。

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

提到这里,根据官方的文档,针对prepare transaction 信息有这样一段话。

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

让事务长时间处于准备状态是不明智的。这将干扰VACUUM回收存储的能力,并且在极端情况下可能导致数据库关闭以防止事务ID封装(参见第25.1.5节)。还要记住,事务将继续持有它所持有的锁。该特性的预期用途是,一旦外部事务管理器验证了其他数据库也准备好了提交,通常就会提交或回滚准备好的事务。

如果您没有设置外部事务管理器来跟踪准备好的事务并确保它们及时关闭,那么最好通过将max_prepared_transactions设置为零来禁用准备好的事务特性。这将防止意外创建准备好的事务,这些事务可能会被遗忘并最终导致问题。

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

实际中prepare transaction本身并不是为应用服务处理所工作的,他工作的目标是真对多个POSTGRESQL在共同完成一个事务的基础上而形成的,类似与MYSQL XA 事务。

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

那么如果我们使用了prepare transaction会产生那些风险的问题

1  客户端销售,掌握prepare的客户端不在掌握这个功能的情况下,事务会持续HOLD在数据库服务器上,处于失控的状态,我们称之为孤儿事务。

而持续情况下,VACUUM 将对相关的事务掌握的表失去控制,导致数据库事务号无法回收,数据表死元组无法回收等问题。所以我们应该持续,在开启了prepare 事务的数据库中,检索当前是否有长期没有commit  的 prepared 事务。

select * from pg_prepared_xacts;

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库

而在处理丢失了控制的情况下,DB 需要对于这些已经失去管理的事务,进行commit 或rollback.

更多针对两阶段事务的讨论可以参见

https://cn.greenplum.org/greenplum_distributed_transaction/

POSTGRESQL PERPARE 事务提交方式,到底用还是不用,postgresql,数据库文章来源地址https://www.toymoban.com/news/detail-604716.html

到了这里,关于POSTGRESQL PERPARE 事务提交方式,到底用还是不用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 到底叫 集合还是数组还是list还是列表?

    1 总体上可以将数据结构分为数组和集合两种,而列表是一个泛指 2 数组 -- 有序的,但长度是固定的-元素数量固定并且需要频繁访问,那么使用数组可能更合适 3 集合 3.1 list  -- 支持添加和删除元素,或者元素的数量不确定,就可以使用List类型 3.2 set -- Set是一种不允许重

    2024年02月14日
    浏览(27)
  • 到底是前端验证还是后端验证

          软件应用研发中, 前端验证还是后端验证这是意识与认知问题。鉴于某些入门同学还不清楚,我们再来看下: 一.  从软件行业来自国外 Q: 前端验证和后端验证都是对同一个数据的验证,有什么区别? A: 二者的目的不同: 前端验证是为了提供更好的用户体验; 后端

    2024年02月04日
    浏览(44)
  • Midjourney中文版到底是官方还是李鬼?

    AI绘画大神Midjourney为何选择QQ频道进军中国市场? Midjourney中文版到底是官方还是李鬼?看这篇文章就知道了! 今天我想和大家聊聊一个最近很火的话题,那就是AI绘画神器Midjourney(简称MJ)来中国了,QQ频道内测火爆开启。这对于喜欢AI绘画的创作者来说,无疑是一个福音,

    2024年02月12日
    浏览(34)
  • Redis到底是多线程还是单线程?

            Redis 是非常的快的!Redis 是基于内存操作,CPU 不是 Redis 性能瓶颈,内存和网络带宽(因为 IO 时需要使用)才是 Redis 的性能瓶颈。 Redis 为什么不使用多线程?         因为在多线程的情况下,CPU会在多个线程之间切换 (上下文切换) 是需要耗时的,大概为 15

    2024年02月01日
    浏览(25)
  • Ai绘画到底是创造艺术还是窃取艺术呢

    随着智能AI技术的发展,AI绘画已经成为一个非常热门的领域。AI绘画的应用范围非常广泛,它对于设计、摄影等领域产生了积极影响,但同时,由于AI绘画的版权究竟归属于谁,AI绘画也引起了版权的争议。那么,AI到底是创造艺术还是窃取艺术呢?本文将对此进行探讨。 一、

    2024年02月15日
    浏览(27)
  • 假如你家大模型还是个二傻子,就不用像llya那样操心AI安全

    原创谭婧,假设如题。 那些傻乎乎的,时不时说胡话(号称“幻觉”),没有变聪明(号称“智能涌现”)的大模型, 谅它也掀不起什么大风浪, 然而,厉害的大模型就完全不同了, 只有遥遥领先的技术,才会遇上别人没有遇到,或者别人还没有资格遇到的难题。 现在的

    2024年02月04日
    浏览(42)
  • MySQL 和 PostgreSQL,我到底选择哪个?

    MySQL 和 PostgreSQL 是两个广泛使用的关系型数据库管理系统(RDBMS)。它们都具有强大的功能和广泛的社区支持,但在某些方面存在一些差异。本文将详细比较 MySQL 和 PostgreSQL,包括它们的特点、性能、扩展性、安全性以及适用场景等方面。 MySQL 特点 MySQL 是一个开源数据库管理

    2024年02月16日
    浏览(32)
  • C语言中到底是非0表示真,还是1表示真?

    我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重点说一说C语言中到底是非0表示真,还是1表示真?这就是说到C语言中的两个常见运算形式,即关系运算符和逻辑运算符。 为照顾急性子的同学,先直接说结论: 关系运算符和逻辑运算符用“真”和“假”表示运算

    2024年02月04日
    浏览(49)
  • 数据库update语句到底是行锁还是表锁?

    先说结论: 无索引的情况下,如果不走主键,那么update为表锁;有索引的情况下,走索引或者走主键(效果一样),那么update变为行锁。 大致把问题分为两种情况:有索引或者没有索引 先建一个没有索引的表,模拟一些数据,并且把事务自动提交关掉。 我们先在第一个查询

    2023年04月09日
    浏览(42)
  • STM32初学者,到底选标准库还是HAL库?

    当初学者尝试学习STM32开发时,通常会面临一个关键的选择:是选择STM32的标准库,还是HAL库?这两个库各自有着优势与适用场景,本文将从多个角度分析,帮助初学者更好地选择适合自己的库。 在开始之前,让我们先搞清楚这两个库的基本概念。标准库是一组用于STM32系列微

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包