广告
返回顶部
首页 > 资讯 > 数据库 >PostgreSQL事务处理机制原理
  • 896
分享到

PostgreSQL事务处理机制原理

2024-04-02 19:04:59 896人浏览 安东尼
摘要

本篇内容主要讲解“postgresql事务处理机制原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Postgresql事务处理机制原理”吧!背景说明:以ACI

本篇内容主要讲解“postgresql事务处理机制原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Postgresql事务处理机制原理”吧!

背景说明:

以ACID为特征的事务是关系数据库的一项重要的也是基本的功能。了解事务的实现原理不仅对数据库产品本身的开发,对使用数据库的应用程序的开发也有一定的益处。因此本次以PostgreSQL为对象简单介绍了其事务实现的原理。

内容概述:

事务的实现原理可以解读为DBMS采取何种技术确保事务的ACID特性。PostgreSQL针对ACID的实现技术如下表所示。

表1:事务的4个特征ACID及响应的实现技术

ACID

实现技术

原子性

mvcC

一致性

约束(主键,外键等)

隔离性

MVCC

持久性

WAL

 
可以看到PostgreSQL中支撑ACID的主要是MVCC和WAL两项技术。MVCC和WAL是两个比较成熟的技术,通常的关系数据库中都有相应的实现,但每个数据库具体的实现方式又存在很大差异。下面介绍一下PostgreSQL中MVCC和WAL的基本实现原理。

1.  MVCC

MVCC(Multiversion Concurrency Control)即多版本并发控制,它可以避免读写事务之间的互相阻塞,相比通常的封技术可极大的提高业务的并发性能。PostgreSQL中的MVCC实现原理可简单概括如下:

1)数据文件中存放同一逻辑行的多个行版本(称为Tuple)

2)每个行版本的头部记录创建以及删除该行版本的事务的ID(分别称为xmin和xmax)

3)每个事务的状态(运行中,中止或提交)记录在pg_clog文件中

4)根据上面的数据并运用一定的规则每个事务只会看到一个特定的行版本

通过MVCC读写事务可以分别在不同的行版本上工作,因此能够在互不冲突的情况下并发执行。

图1:基于MVCC的数据更新举例
PostgreSQL事务处理机制原理

2.  WAL

当系统意外宕机后,恢复时需要回退未完成事务所做的更改并确保已提交事务所作的更改均已生效。在PostgreSQL中通过前面提到的MVCC很容易做到的第一点,只要把所有pg_clog文件中记录的所有“运行中”的事务的状态置为“中止”即可,这些事务在宕机时都没有结束。对于第二点,必须确保事务提交时修改已真正写入到永久存储中。但是直接刷新事务修改后的数据到磁盘是很费时的,为解决这个问题于是引入了WAL(Write-Ahead Log)。

WAL的基本原理如下:

1)更新数据页前先将更新内容记入WAL日志

2)异步刷新数据Buffer的脏页和WAL Buffer到磁盘

3)Buffer管理器确保绝不会先于对应的WAL记录刷新脏数据到磁盘

4)事务提交时,将WAL日志同步刷新到磁盘

5)Checkpoint发生时,将数据Buffer的所有脏页刷新到磁盘

图2:数据更新时的Buffer修改
PostgreSQL事务处理机制原理



图3:更新提交和Checkpoint时的磁盘同步
PostgreSQL事务处理机制原理

Q&A

1、Q:PostgreSQL中DDL支不支持事务?

A:支持。PostgreSQL中对DDL的处理方式和普通的DML类似,也是支持事务的。

 

2、 Q:PostgreSQL中对BLOB数据的处理支不支持事务?

A:支持。对BLOB(bytea或large object)数据的事务处理和普通数据的差别不大,但由于BLOB数据较大涉及BLOB的事务会产生很大的WAL日志文件。

3、Q:PostgreSQL中很大的数据,比如BLOB如何在数据页面中存储?

A:默认数据页面的大小是8K,当有很大数据时可能导致一个页面放不下整个数据行。针对这种情况,PostgreSQL采取一种叫做TOAST的技术,对于比较大的列只在行中放一个类似指针的东西,完整的数据放在另一个单独的TOAST表中。在TOAST表中数据被切割成若干个chunk,每个chunck以一个数据行的形式存放。

 

4、Q:PostgreSQL中可重复读和可串行化隔离级别都不会出现幻读那它们的区别是什么?

A: 根据SQL规约,能够回避幻读就已经满足了“可串行化”隔离级别的要求。但是SQL规约定义的“可串行化”并不是严格意义上的可串行化,仅仅能回避幻读不等于可以把并发执行的几个事务转化为几个事务严格按某个顺序先后执行 。PostgreSQL中的可重复读可以回避幻读但不是严格意义上的可串行化,但是可串行化就是。顺便说一下,oracle中的可串行化也不是严格意义上的可串行化,实际上它等价于PostgreSQL中的可重复读。

 

5、Q:PostgreSQL中事务ID分配完了怎么办?

A:从头开始重新分配(实际上从3开始重新分配,0,1,2已做为特殊用途,这称之为事务回卷)。但这样可能形成事务ID冲突的问题,PostgreSQL中解决这个问题的措施有两个。第一,定期清理留在数据文件中的过老的事务ID,将它们统一设置为一个特殊值(2),在做事务新旧比较时,这个特殊的事务ID永远比其他普通的事务ID旧。这就保证了系统中事务ID的范围跨度不会过大。第二,在做事务新旧比较时不是简单的比较两个事务ID的算数值大小,而且考虑到了特殊事务ID和事务回卷的情况。比如根据内部的比较规则,无符号INT类型的事务ID 0x00000005比0xFFFFFFFF新。因为第一个措施已经保证了系统中事务ID间的跨度不会过大(不超过2^31),所以0x00000005一定是事务ID回卷后的结果而0xFFFFFFFF还没有发生回卷(或者说比0x00000005少回卷一次)。

到此,相信大家对“PostgreSQL事务处理机制原理”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL事务处理机制原理

本文链接: https://www.lsjlt.com/news/59950.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PostgreSQL事务处理机制原理
    本篇内容主要讲解“PostgreSQL事务处理机制原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL事务处理机制原理”吧!背景说明:以ACI...
    99+
    2022-10-18
  • postgresql事务处理与并发控制
    postgresql事务处理与并发控制:事务是postgresql中的基本工作单元,是用户定义的一个数据库操作序列。这些操作要么全做,要么全不做,是一个不可分割的工作单位。在postgresql中,事务管理...
    99+
    2022-10-18
  • Hibernate事务处理机制(转)
    Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transacti...
    99+
    2023-06-03
  • 理解 Node.js 事件驱动机制的原理
    学习 Node.js 一定要理解的内容之一,文中主要涉及到了 EventEmitter 的使用和一些异步情况的处理,比较偏基础,值得一读。 大多数 Node.js 对象都依赖了 EventEmitter ...
    99+
    2022-06-04
    原理 机制 事件
  • PostgreSQL中空闲数据块管理机制的原理是什么
    本篇文章给大家分享的是有关PostgreSQL中空闲数据块管理机制的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数据块空闲空间的产...
    99+
    2022-10-18
  • 怎么理解PostgreSQL事务管理
    本篇内容介绍了“怎么理解PostgreSQL事务管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Th...
    99+
    2022-10-18
  • Qt 事件处理机制的深入理解
    目录1.Qt中事件的来源,谁接收处理。2.事件处理顺序3.事件过滤器4.event方法5.鼠标进入事件6.accept(),ignore()1.Qt中事件的来源,谁接收处理。 Qt中...
    99+
    2022-11-13
  • 怎么理解PostgreSQL事务管理中的子事务
    本篇内容主要讲解“怎么理解PostgreSQL事务管理中的子事务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解PostgreSQL事务管理中的子事务”吧...
    99+
    2022-10-18
  • java异常处理机制原理是什么
    Java异常处理机制的原理是基于异常(Exception)的概念。在Java中,异常是指在程序运行过程中发生的错误或异常情况。当代码...
    99+
    2023-09-16
    java
  • android事件处理机制是什么
    Android事件处理机制指的是Android系统中对用户输入事件以及其他系统事件的处理方式。Android系统中的事件处理机制主要包括以下几个部分:1. 事件触发:Android系统通过底层硬件驱动来获取用户输入事件,包括触摸事件、按...
    99+
    2023-08-11
    android
  • MySQL事务隔离机制与实现原理是什么
    这篇“MySQL事务隔离机制与实现原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2022-11-30
    mysql
  • node中事件机制的原理是什么
    今天就跟大家聊聊有关node中事件机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Publish/Subscribe(发布/订阅模式)...
    99+
    2022-10-19
  • PostgreSQL逻辑复制解密原理解析
    目录1 概念与原理复制槽输出插件复制协议与消息开启流式传输WAL工作流程2 问题与演进问题一:Failover slot问题二:DDL同步问题三: 双向同步其他问题:3 应用与实践全量与增量同步自建实例迁移上云实践在数字...
    99+
    2022-09-21
  • Spring事务专题(三)事务的基本概念,Mysql事务处理原理
    前言 本专题大纲: 专栏大纲 我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待接下来两...
    99+
    2017-03-18
    Spring事务专题(三)事务的基本概念,Mysql事务处理原理 数据库入门 数据库基础教程 数据库 mysql
  • JavaScript事件流:深入理解事件处理和传播机制
    引言 JavaScript中的事件流是一种机制,用于描述和处理事件在DOM树中的传播过程。了解事件流的属性和工作原理对于编写高效的事件处理代码和实现复杂的交互功能至关重要。本文将详细介绍JavaSc...
    99+
    2023-09-14
    javascript 开发语言 ecmascript 原力计划
  • node.js中的事件处理机制详解
    EventEmitter类 在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个集成了EventEmitter类的子类的实例对象,在...
    99+
    2022-06-04
    详解 机制 事件
  • Android的Touch事件处理机制介绍
    Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后。 Android的Touch事件处理分3个层面:Activity层,ViewGroup层...
    99+
    2022-06-06
    touch Android
  • AngularJS 事件发布机制的原理是什么
    AngularJS 事件发布机制的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。未读消息提醒当器具用户或技术机构对非...
    99+
    2022-10-19
  • vue中事件机制原理的示例分析
    这篇文章主要介绍了vue中事件机制原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。常见的事件机制demo都会包含在这段代码中:&...
    99+
    2022-10-19
  • Mysql事务原理
    一、什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 事务的四大特性: 原子性(Atom...
    99+
    2020-08-23
    Mysql事务原理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作