一文了解PostgreSQL MVCC机制

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 一文了解PostgreSQL MVCC机制

一、MVCC(Multiversion Concurrency Control多版本并发控制)

PostgreSQL的并发控制机制在维护一致性和完整性的同时,尽量避免读写堵塞。

传统数据库使用锁机制来避免事务看到不一致的数据,但这会导致请求进入等候队列,甚至超时未处理。基于锁的机制被称为悲观机制,因为它是预防性的:读阻塞写,写阻塞读,导致并发性能较差。

MVCC(多版本并发控制)被称为乐观机制,因为它是后验性的:读不阻塞写,写不阻塞读,提交时才检测冲突。没有锁的情况下,读写不会相互阻塞,从而提升并发性能。

MVCC通过避开传统的锁机制,最大限度减少锁竞争,以提高多用户环境中的性能。适当使用MVCC通常比锁机制提供更好的性能。对于无法适应MVCC的应用,PostgreSQL也提供了表和行级的锁机制。

1、PG多版本并发控制

MVCC(Multiversion Concurrency Control多版本并发控制)

原理图如下:

2、PG多版本并发控制的实现

MVCC多版本标记关键词

XID — 数据库的事务ID

xmin,xmax, 行头部的XID信息

xmin表示插入或更新这条记录的事务XID

xmax表示删除这条记录的事务XID

xid_snapshot : 当前集群中的未结束事务

clog : 事务提交状态日志

数据修改过程如下:

  1. backend 开启一个事务,获得事务号 XID;
  2. 在事务中对数据的任意修改都被 XID 标记;
  3. 其他 backend 扫描数据时,根据隔离级别决定是否可见这些被 XID 修改的数据(默认的读已提交隔离级别看不到这些数据);
  4. 只有当 XID 被标记为 commit(写 WAL commit log 和 clog)后,其他 backend 才能看到这个 XID 修改的数据。

数据可见性条件:

  1. 记录的头部XID早于当前事务(repeatable read要求,read committed不要求);
  2. 记录的头部XID不在当前的XID快照中(即事务状态不是未提交);
  3. 记录头部的XID在CLOG中显示为已提交。

PG中事务快照的文本形式

  1. xminxmaxxip_list
  2. 100104100102
  3. xmin 最早仍然活跃的事务的txid
  4. xmax 第一个尚未分配的txid(例如只开启一个begin)
  5. xip_list 获取快照时活跃事务的txid列表

3、MVCC多版本标记字段

每个表的每行数据(称为tuple)包含4个隐藏字段,可直接访问:

  1. xmin:记录插入tuple时的事务ID。
  2. xmax:默认值为0,删除tuple时记录此值。
  3. cmincmax:标识同一事务中多个语句命令的序列值,从0开始,用于版本可见性判断。

4、MVCC优势和劣势

1、优势

  1. 读操作不会阻塞写,写操作也不会阻塞读,提高了并发访问的性能
  2. 事务的回滚可立即完成,无论事务进行了多少操作
  3. 数据可以进行大量更新,不像MySQLInnodb引擎和Oracle那样需要保证回滚段不会被耗尽

2、劣势

  1. 事务ID个数有限制,当事务ID用完时,会出现wraparound问题。
  2. 大量过期数据占用磁盘降低查询性能
  3. 但是,PG可以通过vacuum应对以上两个问题
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
关系型数据库 PostgreSQL
PostgreSQL VFD机制
PostgreSQL VFD机制
106 0
PostgreSQL VFD机制
|
存储 SQL 缓存
PostgreSQL mvcc可见性判断
PostgreSQL mvcc可见性判断
107 0
|
11月前
|
存储 关系型数据库 Go
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
206 0
|
11月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 的事务管理和并发控制机制解析
PostgreSQL 的事务管理和并发控制机制解析
247 0
|
存储 算法 Oracle
PostgreSQL的MVCC vs InnoDB的MVCC
PostgreSQL的MVCC vs InnoDB的MVCC
80 0
PostgreSQL的MVCC vs InnoDB的MVCC
|
关系型数据库 PostgreSQL
PostgreSQL pg_resetwal处理机制
PostgreSQL pg_resetwal处理机制
148 0
|
存储 SQL Oracle
再谈PostgreSQL的膨胀和vacuum机制及最佳实践
作者介绍 朱贤文,成都文武信息技术有限公司创始人,PostgreSQL中国用户会核心组成员,熟悉数据库,存储和集群技术; 成都文武信息技术有限公司是PostgreSQL和GreenPlum数据库服务的专业厂商,主要产品是ECOX集群管理系统和Hunghu Cloud,专门运行数据库的私有云系统,带高端存储功能。公司总部位于天府软件园。公司网站:w3.ww-it.cn 写本文的原因 这两天有两篇专门介绍PostgreSQL的vacuum机制的技术文章,得到了比较热烈和正面的反馈,让用户可以比较清楚地理解和使用这个特性。 我个人觉得有点小遗憾:这两篇文章没有跳出技术的角度,分析为什么会有这
377 0
|
SQL 关系型数据库 PostgreSQL
浅析PostgreSQL事务处理机制
1、Q:PostgreSQL中DDL支不支持事务? A:支持。PostgreSQL中对DDL的处理方式和普通的DML类似,也是支持事务的。
1275 0
|
SQL 监控 关系型数据库
浅析PostgreSQL事务处理机制
前段时间在公司小范围做了一个关于PG事务实现的讲座,最后总结了一个摘要性的东西,分享一下,欢迎拍砖。 背景说明: 以ACID为特征的事务是关系数据库的一项重要的也是基本的功能。
1619 0
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
339 0