当前位置: 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,钉钉群专门有视频讲解

  • PolarDB-X高可用与容灾(WIP)
  • 大连财经学院 - 国产数据库工作室揭牌仪式圆满成功(CUUG)
  • 河北工程技术学院 - 国产数据库工作室揭牌仪式圆满成功
  • postgresql从小白到高手 - 第38讲:数据库备份
  • 11月18日直播!杭州峰会大咖晚宴煮酒论英雄+PG技术大讲堂(34)
  • 11月27日,CUUG新鲜出炉的Oracle DB 19C OCP证书
  • Oracle 19c OCM认证好考吗?CUUG OCM成绩公布
  • Oracle 19c OCM认证考试成绩出炉!- CUUG WDP培训中心
  • 菏泽学院 - 国产数据库工作室揭牌仪式圆满成功
  • 2023年12月,PostgreSQL认证培训红头文件【工信部人才交流中心】
  • 2024年第13届PostgreSQL中国技术大会来啦!
  • OCP认证能不能在家中考试,不去VUE考点考试吗?
  • 恭喜CUUG Guo同学以较高分数通过19c OCM认证考试!
  • Oracle数据库加入AI功能,Database 23c改名为Database 23ai
  • DB-Engines:PostgreSQL is the DBMS of the Year 2023
  • PostgreSQL技术大讲堂 - 第44讲:pg流复制部署
  • PostgreSQL技术大讲堂 - 第45讲:poc-tpcc测试
  • PostgreSQL技术大讲堂 - 第46讲:poc-tpch测试
  • PostgreSQL技术大讲堂 - 第47讲:JMETER工具使用
  • PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived
  • PostgreSQL技术大讲堂 - 第50讲:PG分区表管理
  • 3月30日,工信部人才交流中心PostgreSQL认证考试顺利结束
  • 2024年4月8日,工信人才发布红头文件:PostgreSQL数据库管理人才研修与评测班
  • 恭喜CUUG入选2024年工业和信息化重点领域人才能力评价支撑机构
  • 天津职业技术师范大学《PolarDB开源数据库工作室》授牌仪式顺利完成
  • 温州大学国产开源数据库工作室成功举办PostgreSQL技能培训活动
  • 2024-02-02,恭喜CUUG 刘同学通过Oracle考试获得OCP 19c证书
  • 5月16日,开源驱动教育创新研讨会(青岛站)成功举办-CUUG
  • postgresql技术大讲堂 - 第39讲:数据库完全恢复
  • 温州大学 - 开源国产数据库工作室成立揭牌仪式圆满结束
  • postgresql从小白到高手 - 第37讲:postgres物理备份和恢复概述
  • postgresql从小白到高手 - 第36讲:postgresql逻辑备份
  • postgresql从小白到高手 - 第35讲:中间件PgBouncer部署
  • PostgreSQL PGCP是什么级别的认证?
  • PGCP中级认证考试的三个维度考核
  • 国内PostgreSQL认证,工信部人才交流中心PG技术能力提升培训认证
  • 今天(5月6日),CUUG 赵同学收到19c OCM认证考试证书!
  • 5月17日,PolarDB开源数据库沙龙(青岛站)成功举办-CUUG
  • postgresql技术大讲堂 - 第40讲:数据库不完全恢复
  • PostgreSQL技术大讲堂 - 第41讲:表空间备份与恢复
  • PostgreSQL技术大讲堂 - 第42讲:pg_rman部署与使用
  • PostgreSQL技术大讲堂 - 第43讲:流复制原理
  • 1月17日阿里云PolarDB开发者大会PolarDB DevCon
  • 阿里云PolarDB开发者大会圆满结束,CUUG两次获奖
  • 2024-1-12,恭喜CUUG 王同学获得Oracle OCP证书
  • 2024年首张Oracle OCP证书-CUUG胡同学
  • 北京培黎职业学院 - PolarDB开源国产数据库工作室成立揭牌 - CUUG
  • PostgreSQL技术大讲堂 - 第51讲:老陈与德哥聊一聊数据库调优
  • oracle ocp证书有效期多长时间
  • PostgreSQL技术大讲堂 - 第52讲:与德哥背后的男人们聊如何实现自动性能调优