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

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

2023-06-30作者:gbaiyou来源:www.gbaiyou.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认证证书?
  • 有序推进合作互补,共建PostgreSQL良好生态环境
  • 8月26日,恭喜CUUG 肖同学获得19c OCM证书!
  • 报名啦!PolarDB数据库创新设计赛(天池杯)等你来战
  • 相约华中科技大学,移动云技术论坛 第四期:打造数智时代新型数据底座
  • PostgreSQL技术大讲堂 - 第65讲:pg与Oracle的绑定变量窥视对比
  • 【优技教育】Oracle 19c OCP 082题库(第16题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第18题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第19题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第20题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第22题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第23题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第24题)- 2024年修正版
  • Oracle 19c OCP 认证考试 082 题库(第26题)- 2025年修正版
  • PostgreSQL技术大讲堂 - 第66讲:PG数据库参数调整
  • 信创领域认证,来自工信部人才交流中心的PostgreSQL培训班
  • 单考一个OCP认证?还是OCP和OCM认证都拿到手?
  • 考前须知:Oracle OCP考试流程和准备
  • 你还在犹豫要不要考个OCP认证吗
  • PostgreSQL技术大讲堂 - 第64讲:给pg插上翅膀-pg_quack
  • 33条必看问题!腾讯云认证考试须知!
  • AI4DB系列公开课--让AI生成SQL语句
  • PolarDB开源社区荣获2024 OSCAR尖峰开源项目及开源社区奖
  • PostgreSQL数据库技术沙龙福州站圆满结束!
  • 恭喜CUUG多位同学获得PGCP中级-PGCM高级证书
  • 【优技教育】Oracle 19c OCP 082认证考试题库(第5题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第1题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第3题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第8题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第13题)- 2024年修正版
  • 【优技教育】Oracle 19c OCP 082题库(第14题)- 2024年修正版
  • Oracle 19c OCP 082认证考试题库(第6题)- 2024年修正版
  • Oracle 19c OCP 082认证考试题库(第7题)- 2024年修正版
  • PG17版本来了!PostgreSQL全球开发组宣布PostgreSQL 17发布!
  • PostgreSQL技术大讲堂 - 第67讲:PG完全恢复与不完全恢复一网打尽
  • 为什么要考工信部人才交流中心PostgreSQL认证
  • 象形闽都 数智榕城 - PostgreSQL中文社区技术沙龙 - 福州站
  • 有一种能力认证,叫做工信人才PostgreSQL认证
  • 备考Oracle OCP 19c认证,这篇内容你需要了解
  • 深入了解Oracle OCP认证,开启数据库专业之旅
  • 数据库认证有用吗?证书:职场晋升的有力助推器
  • 9月28日,工信部人才交流中心&CUUG-PGCA+PGCP+PGCM认证考试完成!
  • 河北建筑工程学院 - 国产数据库工作室揭牌 & 天池杯数据库大赛
  • 浙江大学开源技术交流,PolarDB数据库创新设计赛(天池杯)等你来战
  • 中国人民大学举办PolarDB数据库创新设计赛(天池杯)交流会,大赛技术指导陈卫星老师现场答疑
  • PostgreSQL技术大讲堂 - 第63讲:duckdb数据库盛宴
  • 金蝶集团信创PostgreSQL数据库认证开班啦!!!
  • “多图警告” - 带你快速浏览2024杭州云栖现场
  • 汇集众多AI硬科技 9月19日 阿里云栖大会即将到来
  • 腾讯云TDSQL数据库认证值得考吗?来看看TDSQL证书有什么用