当前位置: hlflowers->考试 > PostgreSQL技术大讲堂 - 第20讲:事务概述与隔离级别

PostgreSQL技术大讲堂 - 第20讲:事务概述与隔离级别

2023-06-30作者:hlflowers来源:www.hlflowers.com

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。

第20讲:事务概述与隔离级别

内容1:ACID四大特性

内容2:PostgreSQL事务隔离级别

内容3:MVCC介绍

内容4:Clog与事务状态

内容5:事务快照

内容6:可重复读隔离级别特点

内容7:读提交隔离级别特点

内容8:可串行化隔离级别特点


ACID概述

· ACID四大特性:

--> Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

--> Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,这包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

--> Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

--> Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。


PostgreSQL支持的事务隔离级别

· 下表描述了PostgreSQL实现的事务隔离级别


MVCC概述

· 事务id(txid)

并发控制是一种在数据库中并发运行多个事务时保持一致性和隔离性的机制,这是ACID的两个属性。

并发控制技术:

--> 多版本并发控制(MVCC)

--> 严格的两阶段锁(S2PL)

--> 乐观并发控制(OCC)

· MVCC特点

每次写操作都会创建数据项的新版本,同时保留旧版本。当事务读取一个数据项时,系统会选择其中一个版本以确保单个事务的隔离。MVCC的主要优点是“读不阻止写,写不阻止读,相反,例如,基于S2PL的系统必须在写卡器写入项时阻止读卡器,因为写卡器获取项的独占锁。PostgreSQL和一些rdbms使用MVCC的一个变体,称为快照隔离(Snapshot Isolation,SI)。


MVCC实现对比

· 事务id(txid)

PostgreSQL通过应用可见性检查规则来选择项目的适当版本

由于PostgreSQL数据块中包含了未删除和已删除的行的数据,所以在读取数据块中行的时候,需要一套规则来判断哪些行能够被哪些事务所看得见,我们成为行可见性规则

Oracle使用回滚段来选择项目的适当版本

Oracle专门创建了一个回滚表空间,用来存放修改前的行的数据,而表的数据块中没有包含删除行的数据,所以不需要行可见性规则来判断。


事务状态

· Transaction Status

四种事务状态:

--> IN_PROGRESS

--> COMMITTED

--> ABORTED

--> SUB_COMMITTED


Commit Log

· Clog 工作原理


事务快照

· 内置函数txid_current_snapshot及其文本表示格式

testdb=# SELECT txid_current_snapshot();

txid_current_snapshot

-----------------------

100:104:100,102

(1 row)

· txid_current_snapshot的文本表示为“xmin:xmax:xip_list”,组件描述如下

Xmin:最早仍在活动的txid。所有以前的事务要么提交并可见,要么回滚并停止。

Xmax:第一个尚未分配的txid。截至快照时,所有大于或等于此值的txid尚未启动,因此不可见。

xip_list:快照时的活动txid。该列表仅包含xmin和xmax之间的活动txid。

例如,在快照'100:104:100,102'中,xmin是'100',xmax是'104',xip_list是'100,102'。

· Examples of transaction snapshot representation


事务管理器

· 不同隔离级别的事务快照状态


并发UPDATE时

防止更新的数据丢失

· 并发UPDATE操作,隔离级别不同如何保护已修改的数据不丢失

1)如果A事务回滚,则b事务能够更新成功

2)B事务如果查询了表,则再次更新时失败,如果没有,则会更新成功



防止更新的数据丢失

· 读提交事务隔离级别(事务A和B同时修改同一行)

· 可重复读事务隔离级别(事务A和B同时修改同一行)

· 可重复读事务隔离级别(事务B在提交前执行了查询)

· 可重复读事务隔离级别(事务B在提交前没有执行查询)


可串行化快照隔离

· SSI(可串行化快照隔离)实施的基本策略

写入倾斜计划及其优先级图

· 在PostgreSQL中实现SSI

SIREAD locks:SIREAD锁在内部称为谓词锁,三个部分组成,由一对对象和(虚拟)txid 组成。

rw-conflicts:rw-conflicts是SIREAD锁的三个组成部分中的一个和读写SIREAD锁的两个txid

· SSI 怎样造成的

事务提交失败的原因是要保护事务A修改的结果,因为事务B是在可串行化事务隔离级别,所以无法看到事务A修改后的结果

· 其它造成的场景

注意事务提交的不同顺序

· 假阳性可串行化快照隔离异常

两个事务分别查询和更新各自的行,所以不会影响,都能够提交成功。

· 假阳性可串行化快照隔离异常(1) – Using sequential scan

表没有索引,导致顺序扫描,两个事务操作时发生交叉访问同一个块

· 假阳性可串行化快照隔离异常(2) – Index scan using the same index page

如果表比较小,导致root和leaf索引块同属于一个块,两个事务也发生交叉访问同一个索引块

· 假阳性可串行化快照隔离异常(3) – Index scan using the difference index page

插入新数据,导致root和leaf索引块不属于一个块,不会造成交叉访问

以上就是 第20讲- 事务与隔离级别 的内容,欢迎一起探讨交流,往期视频,联系cuug

QQ交流群:752027153

微信交流群:联系客服拉你进微信PG交流群

钉钉交流群:35822460,钉钉群专门有视频讲解

  • PostgreSQL技术大讲堂 - 第47讲:JMETER工具使用
  • PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived
  • PostgreSQL技术大讲堂 - 第50讲:PG分区表管理
  • 5月25日,温州大学49名学生参加工信人才PostgreSQL认证考试!
  • 5月30日,PG中级证书来了!工信人才PostgreSQL管理员认证证书!
  • 6月1日,汇华学院12名学生参加工信人才PostgreSQL认证考试!
  • PG技术大讲堂 - 第55讲:通义大模型+向量数据库实现AI的外脑
  • PostgreSQL技术大讲堂 - 第53讲:老陈与德哥开讲PostgreSQL 17新特性
  • PostgreSQL技术大讲堂 - 第54讲:如何在上线前精准评估PG SQL性能
  • PostgreSQL技术大讲堂 - 第52讲:与德哥背后的男人们聊如何实现自动性能调优
  • PostgreSQL技术大讲堂 - 第51讲:老陈与德哥聊一聊数据库调优
  • 5月16日,开源驱动教育创新研讨会(青岛站)成功举办-CUUG
  • 5月17日,PolarDB开源数据库沙龙(青岛站)成功举办-CUUG
  • 有大奖!第13届PostgreSQL中国技术大会:聚焦云端创新,汇聚智慧共享
  • PolarDB开源社区走进金蝶,开源数据库沙龙成功举办!
  • 阿里云PolarDB再获顶会SIGMOD最佳论文奖
  • 阿里云斩获国际数据库顶会ICDE 2024最佳论文
  • 腾讯云数据库TDSQL荣获深圳市科技进步奖一等奖
  • PostgreSQL技术大讲堂 - 第56讲:老陈与德哥聊“数据库孤儿文件”
  • 7月8日,恭喜CUUG 张同学通过19c OCM认证考试,成绩公布!
  • Oracle OCP证书还有用吗 含金量有多高
  • 腾讯云认证级别名称TCA、TCP、TCE升级为TCCA、TCCP、TCCE
  • 怎么报考腾讯云TDSQL数据库工程师认证(TCCA、TCCP、TCCE)
  • PostgreSQL PG夜话(第20期):数据库老陈、德哥、快立方华总,聊一聊数据库内存管理
  • PostgreSQL从入门到精通教程,这样学习postgres
  • PostgreSQL数据库,为什么会异军突起?
  • PostgreSQL中国技术大会 CUUG获得PostgreSQL数据库认证与培训合作伙伴
  • 不懂就问:什么是PostgreSQL数据库管理员认证
  • 是时候解锁一下“PostgreSQL数据库认证专家”了
  • OCP认证没有含金量了?来看看Oracle OCP 证书的用处!
  • Oracle OCM证书还值得考吗?哪些人需要考OCM
  • Oracle 数据库认证,数据库领域的金字招牌
  • 2024-02-02,恭喜CUUG 刘同学通过Oracle考试获得OCP 19c证书
  • OCP认证能不能在家中考试,不去VUE考点考试吗?
  • 恭喜CUUG Guo同学以较高分数通过19c OCM认证考试!
  • 3月30日,工信部人才交流中心PostgreSQL认证考试顺利结束
  • 2024年4月8日,工信人才发布红头文件:PostgreSQL数据库管理人才研修与评测班
  • 恭喜CUUG入选2024年工业和信息化重点领域人才能力评价支撑机构
  • 天津职业技术师范大学《PolarDB开源数据库工作室》授牌仪式顺利完成
  • 温州大学国产开源数据库工作室成功举办PostgreSQL技能培训活动
  • Oracle数据库加入AI功能,Database 23c改名为Database 23ai
  • Oracle OCP认证还值得考吗 考OCP证书需要门槛吗
  • 今天(5月6日),CUUG 赵同学收到19c OCM认证考试证书!
  • oracle ocp证书有效期多长时间
  • PostgreSQL技术大讲堂 - 第57讲:老陈与德哥聊“数据库安全”
  • PostgreSQL技术大讲堂 - 第58讲:老陈与德哥聊“txid从32位变成64位的影响与调整”
  • 报名啦!第13届PostgreSQL中国技术大会,”聚焦云端创新 汇聚智慧共享“
  • 汇华学院PG证书来了!工信人才&CUUG PostgreSQL管理员认证!
  • 温州大学PG证书来了!工信人才PostgreSQL管理员认证证书!
  • ocm认证考试费用多少钱,Oracle OCM考几科