多版本并发控制MVCC(Multi-Version Concurrency Control )

本文通过一系列图例详细解析了数据库事务中不同事务对数据版本的可见性问题,阐述了recently dead状态的概念及其如何影响VACUUM操作。

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

参考文章:http://www.pgcon.org/2008/schedule/attachments/54_PGCon2008-HOT.ppt

http://www.cnblogs.com/gaojian/p/3295951.html

图1:事务T1改变数据V1,将其改为数据V2,在堆中,数据如下图



图2:事务T3改变了V2,将其改为V3,在堆中,数据如下图:目前事务T2还在活动中,所以V1和V2属于recently dead状态,而不是真的dead状态。




图3:从可视性而言,事务T0只能看到数据V1。因为它早于事务T1启动。



图4:事务T1提交后,事务T2启动,此时事务T3尚未启动,故T2可以看到T1提交后的数据V2。



图5:事务T3提交后,事务T4启动,故T4只能看到数据V3。




图6: 前面说过,当还有事务活动中访问数据V1和V2,V1和V2的状态是recently dead。
当T0和T2都结束,已经没有事务在访问数据V1和V2了,此时V1和V2为dead状态,所以V1和V2都成为VACUUM的处理对象了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值