PostgreSQL中的多版本并发控制

多版本并发控制的原理

在并发操作中,当正在写时,如果用户在读,可能会产生数据不一致的问题。比如一行的前半部分刚写入,后半部分还没有写入,这时读的人可能读取到的数据行,其前半部分数据是新的,后半部分数据是旧的,这样就导致了数据一致性问题。解决这个问题最简单的办法是使用读写锁。写的时候,不允许读,正在读的时候也不允许写,但这种方法导致读和写不能并发。于是,有人想到了一种能够让读写并发的方法(MVCC)。

实现MVCC的方法有两种

1、写数据时,把旧数据移到一个单独的地方,如回滚段中,其他人读数据时,从回滚段中把旧的数据读出来。

2、写数据时,旧数据不删除,而是把新数据插入。

PostgreSQL数据库使用的是第二种方法,而Oracle和MySQL中的innodb引擎使用的是第一种方法。

PostgreSQL中多版本并发控制

PostgreSQL中是通过把旧数据留在数据文件中,新插入一条数据来实现多版本功能,为实现该功能,没长表上都添加了四个系统字段tmin、tmax、cmin、cmax。当两个事物同事访问记录时,通过参考tmin和tmax的标记可判断记录的版本,然后根据版本号与自己当前的事务标识进行比较,确定自己的数据权限。Postgresql通过运行vaccum进程回收之前的存储空间解决旧数据的空间释放问题。

在Postgresql中,处于效率的考虑。若事务失败,事务产生的数据不会在事务回滚时被清理,而是标记为无效。通过记录事务的状态,Postgresql可以判断数据是否有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值