赞
踩
我们就来分析事务5中,两次快照读读取数据,是如何获取数据的?
在事务5
中,查询了两次id为30的记录,由于隔离级别为Read Committed
,所以每一次进行快照读
都会生成一个ReadView,那么两次生成的ReadView如下。
那么这两次快照读在获取数据时,就需要根据所生成的ReadView以及ReadView的版本链访问规则
,到undolog版本链
中匹配数据,最终决定此次快照读返回的数据。
在进行匹配时,会从undo log的版本链
,从上到下进行挨个匹配:
- 先匹配
这条记录,这条记录对应的trx_id为4
,也就是将4带入右侧的匹配规则中。 ①不满足 ②不满足 ③不满足 ④也不满足 ,都不满足,则继续匹配undo log版本链的下一条。
- 再匹配第二条
,这条记录对应的trx_id为3
,也就是将3带入右侧的匹配规则中。①不满足 ②不满足 ③不满足 ④也不满足 ,都不满足,则继续匹配undo log版本链的下一条。
- 再匹配第三条
,这条记录对应的trx_id为2
,也就是将2带入右侧的匹配规则中。①不满足②满足
终止匹配,此次快照读,返回的数据就是版本链中记录的这条数据。
在进行匹配时,会从undo log的版本链
,从上到下进行挨个匹配:
- 先匹配
这条记录,这条记录对应的trx_id为4
,也就是将4带入右侧的匹配规则中。 ①不满足 ②不满足 ③不满足 ④也不满足 ,都不满足,则继续匹配undo log版本链的下一条。
- 再匹配第二条
,这条
记录对应的trx_id为3
,也就是将3带入右侧的匹配规则中。①不满足②满足
。终止匹配,此次快照读,返回的数据就是版本链中记录的这条数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。