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

news2024/11/23 19:14:46

00169de54b0c312724152ba21a888058.png

开头还是介绍一下群,如果感兴趣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'

38b8e945b86ee5834990d774e02e12ec.png

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

93918f5e9484655b3d9ef9ebe39b70a1.png

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

af0dfc9dbfc6bd1b6d1997916a655459.png

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

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

340793a94693f831897db69600121d5f.png

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

544c4599fb8b31f960afa79021febc24.png

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

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

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

select * from pg_prepared_xacts;

4ec0414105d7f33975dae3bbc34029f8.png

a5c550936acf3285694183b0628eefdc.png

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

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

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

0feab3c1c45d62de86268e3c9d33e9c7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单Bank OTA升级:STM32G071 APP (二)

接上一篇文章:单Bank OTA升级:STM32G071 BootLoader (一):跳转链接 什么是单Bank升级:将Flash划分为以下3个区域。 BootLoader区:程序进行升级的引导程序,根据Upade_Flag来判断跳转Bank区运行程序或是接收…

spring复习:(52)注解方式下,ConfigurationClassPostProcessor是怎么被添加到容器的?

进入AnnotationConfigApplicationContext的构造方法: 进入AnnotatedBeanDefinitionReader的构造方法: 进入this(registry, getOrCreateEnvironment(registry));代码如下: 进入AnnotationConfigUtils.registerAnnotationConfigProcessors方…

贤鱼的刷题日常(数据结构栈学习)-1696:波兰表达式--(递归+栈双题解)题目详解

🏆今日学习目标: 🍀例题讲解1696:波兰表达式 ✅创作者:贤鱼 ⏰预计时间:25分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:c 🍁贤鱼的个人社区,欢迎你…

MySQL用户管理详解

文章目录 用户管理创建用户更改密码mysql的权限分类授权实例撤销权力 mysql检查顺序相关文件信息 用户管理 创建用户 在MySQL中,创建用户是管理和授权数据库访问权限的重要操作。下面是创建用户的详细步骤: 连接到MySQL服务器:使用MySQL客户…

人员定位安全管控系统:提升安全管理水平的智能解决方案

在当今社会,人员安全管理成为各行各业关注的焦点。为了保障人员的安全和提高管理效率,人员定位安全管控系统应运而生。 人员定位安全管控系统采用多种定位技术来实现对人员位置的准确定位,如GPS(全球定位系统)、Wi-Fi…

强化学习论文《Deep Reinforcement Learning that Matters》笔记

文章目录 1. 简介2. 实验分析超参数网络架构Reward ScaleRandom Seeds and TrailsEnvironmentCodebases 3. Reporting Evaluation MetricsOnline view vs. Policy OptimizationConfidence BoundsPower AnalysisSignificance 4. 结论5. 参考资料 1. 简介 这篇2017年的论文 是强化…

【PHP】phpstudy添加的网站,访问出现 嗯… 无法访问此页面

使用phpstudy创建网站,只有localhost可以访问, 其他所有网站无法访问,可能是你的账户没有修改vhost的权限 找到 C:\Windows\System32\drivers\etc下的vhost文件, 1、右键属性 将只读去掉 2、把用户对此文件的控制权限全部勾上 …

解决直播间源码音视频不同步问题的有效方式

随着网络技术的发展和移动设备的普及,电视、电脑、手机等数码产品越来越智能,我们不管是在家或是在外面都可以运用不同的数码产品去看剧或是短视频等,但可能很多人遇到过这样一种情况:当我们在看剧或是短视频的时候,可…

微信小程序可输入弹窗

addWhite() {wx.showModal({title: 添加白名单,editable: true, // 可输入content: ,complete: (res) > {if (res.confirm) {if (!res.content) { // 输入的值wx.showToast({title: 请填写白名单,icon: error})this.addWhite()}else {// 调接口}}}})},

Linux命令-按照与使用(17)(转载)解决同一台服务器上部署多个tomcat的同一个项目session冲突问题...

———————————————— 版权声明:本文为CSDN博主「strive_or_die」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/strive_or_die/article/details/103191546…

EXCEL模板如何自定义并使用?

文章目录 0.引言1.新建EXCEL2.EXCEL另存为模板3.使用模板 0.引言 使用Excel模板可以帮助用户更高效地处理和分析大量数据,简化重复任务,并提供清晰直观的数据可视化效果。对于需要频繁进行数据处理和分析的个人或组织来说,使用Excel模板是一个…

半导体自动化专用除静电设备的特点和功能

半导体自动化专用离子风机是一种用于半导体制造过程中的特殊风机设备。它通过产生带电粒子(离子)的气流来实现静电去除和除尘,以确保半导体制造环境的洁净和无尘。 以下是半导体自动化专用离子风机的一些特点和功能: 1. 静电去除…

听GPT 讲K8s源代码--pkg(七)

k8s项目中 pkg/kubelet/config,pkg/kubelet/configmap,pkg/kubelet/container,pkg/kubelet/cri 这几个目录处理与 kubelet 配置、ConfigMap、容器管理和容器运行时交互相关的功能。它们共同构成了 kubelet 的核心功能,使其能够在 …

在外远程查看家里内网监控

在外远程查看家里内网监控 现代生活节奏紧张,巨大的压力压得我们喘不过气来,因此很多人选择在家里养一只陪伴我们的宠物,用以舒缓紧张的情绪和繁重的压力。但养了这些小家伙后,不在家时又总想随时看看家里小可爱们的情况&#xf…

STL:双端队列容器适配器仿函数优先级队列

deque 双端队列可以在头部和尾部进行插入删除操作与vector相比,头插效率高,不需要搬移元素 与list相比,空间利用率高 deque逻辑上空间是连续的,物理上并不是,是由一段段小空间拼接而成的 双端队列的迭代器比较复杂 cur…

Python爬虫技术及其原理详解

概要 随着互联网的发展,大量的数据被存储在网络上,而我们需要从中获取有用的信息。Python作为一种功能强大且易于学习的编程语言,被广泛用于网络爬虫的开发。本文将详细介绍Python爬虫所需的技术及其原理,并提供相关的代码案例。 …

Python—数据结构(一)

先放一张自己学习和整理归纳的思维导图,以便让大家都知道我自己的整体学习路线。 数据结构的学习路上内容枯燥,但坚持下来一定有很大的收获!加油💪🏻! 数据结构 数据的概念数据元素: 若干基本…

php基于redis处理session的方法

php基于redis处理session的方法 一个基于redis的处理session的方法,如下: class Session_custom { private $redis; // redis实例 private $prefix sess_; // session_id前缀 // 会话开始时,会执行该方法,连接redis服务器 p…

【JVM】JVM执行流程 JVM类加载 垃圾回收机制等

目录 🌷1、JVM是什么? 🌷2、JVM的执行流程(能够描述数据区5部分) 🌷3、JVM类加载过程 🌷4、双亲委派机制:描述类加载的过程 问题1:类加载器 问题2:什么…

前端知识点视频补充

使用工具: Vscode使用: 需要下载插件:open in browser。这个插件可以快速打开浏览器。 选择文件夹有两种方式:选择打开文件、拖拽方式(这种最方便) 快捷键:快速生成Htm结构文件:…