其他分享
首页 > 其他分享> > MVCC——可重复度(RR)

MVCC——可重复度(RR)

作者:互联网

可重复度(RR):仅在第一次执行快照时生成ReadView,后续快照复用。(例外:当本次事务两次快照读之间有当前读,那么第二次快照读会重新生成ReadView)

在这里插入图片描述
对应的undo log版本链为:
在这里插入图片描述
我们来分析一下事务D两次快照读的ReadView:

第一次ReadView
在这里插入图片描述

根据版本链数据访问规则,第一条数据(trx_id = 3)不满足规则;
第二条数据(trx_id = 2)不满足规则;
第三条数据(trx_id = 1)满足 trx_id(1) < min_trx_id(2),说明数据已经提交,可以访问,所以本次查询结果为==“张三”==。

第二次查询复用上次的ReadView
在这里插入图片描述
根据版本链数据访问规则,第一条数据(trx_id = 3)不满足规则;
第二条数据(trx_id = 2)不满足规则;
第三条数据(trx_id = 1)满足 trx_id(1) < min_trx_id(2),说明数据已经提交,可以访问,所以本次查询结果为==“张三”==。

总结:RR隔离级别的实现关键点在于后面的快照读会复用之前的ReadView,所以别的事务虽然修改并提交了,但是后面的快照读ReadView中的m_ids中还保留者它的id,并不会消除,导致无法访问。由此我们也可解决幻读问题。

特例:产生幻读情况

当两次快照读之间存在当前读时,ReadView会重新生成,产生幻读。

标签:快照,RR,重复,规则,ReadView,trx,MVCC,数据,id
来源: https://blog.csdn.net/huangkechen/article/details/122865038