PostgreSQL的MVCC

PostgreSQL采用MVCC实现一致读,通过为每个事务分配唯一的xid来管理事务可见性。每个元组包含xmin, xmax, cmin, cmax等隐藏列,用于判断行记录对当前事务的可见性。未提交或由回滚事务创建的行对其他事务不可见,而xmax值用于判断事务的更新和删除状态,决定行的可见性。" 104551710,8748359,Docker容器磁盘占用过高解决方案,"['Docker', '存储管理', '日志处理', '容器优化', '系统维护']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:阎书利

基于多个旧值版本的并发控制即MVCC,就是实现一致读。

PostgreSQL为每一个事务分配一个递增的、类型为int32的整数作为唯一的事务ID,即xid。

创建一个新的快照时,将收集当前正在执行的事务id和已提交的最大事务id。

根据快照提供的信息,PostgreSQL可以确定事务的操作是否对执行语句是可见的。

PostgreSQL还在系统里的每一行记录上都存储了事务相关的信息,同样用来判断一行记录对于当前事务是否可见。

在PostgreSQL的内部数据结构中,每个元组(行记录)有4个事务可见性相关的隐藏列:xmin , xmax, cmin, cmax

其中cmin和cmax分别是插入和删除该元组的命令在事务对其他事务的可见性相关;xmin保存了创建该行数据的事务的xid,xmax保存的是删除改行的xid。

sarah=# create table tbl_mvcc(id serial primary key, ival int);
CREATE TABLE

sarah=# insert into tbl_mvcc(ival) values(1);
INSERT 0 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值