MySQL数据库原理学习(五十一)
6.4.5 原理分析
6.4.5.1 RC隔离级别
RC隔离级别下,在事务中每一次执行快照读时生成ReadView。
我们就来分析事务5中,两次快照读读取数据,是如何获取数据的?
在事务5中,查询了两次id为30的记录,由于隔离级别为Read Committed,所以每一次进行快照读都会生成一个ReadView,那么两次生成的ReadView如下。
那么这两次快照读在获取数据时,就需要根据所生成的ReadView以及ReadView的版本链访问规则,到undolog版本链中匹配数据,最终决定此次快照读返回的数据。
A. 先来看第一次快照读具体的读取过程:
在进行匹配时,会从undo log的版本链,从上到下进行挨个匹配
记录对应的trx_id为3,也就是将3带入右侧的匹配规则中。①不满足 ②不满足 ③不满足 ④也不满足 ,都不满足,则继续匹配undo log版本链的下一条
B. 再来看第二次快照读具体的读取过程:
在进行匹配时,会从undo log的版本链,从上到下进行挨个匹配:
记录对应的trx_id为3,也就是将3带入右侧的匹配规则中。①不满足 ②满足 。终止匹配,此次快照读,返回的数据就是版本链中记录的这条数据。
6.4.5.3 RR隔离级别
RR隔离级别下,仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。而RR 是可重复读,在一个事务中,执行两次相同的select语句,查询到的结果是一样的。
那MySQL是如何做到可重复读的呢? 我们简单分析一下就知道了
我们看到,在RR隔离级别下,只是在事务中第一次快照读时生成ReadView,后续都是复用该ReadView,那么既然ReadView都一样, ReadView的版本链匹配规则也一样, 那么最终快照读返回的结果也是一样的。
所以呢,MVCC的实现原理就是通过 InnoDB表的隐藏字段、UndoLog 版本链、ReadView来实现的。
而MVCC + 锁,则实现了事务的隔离性。而一致性则是由redolog 与 undolog保证。
相关文章
- 如何利用六西格玛有效管理项目团队成员?
- 大数据NiFi(七):NiFi集群页面管理节点操作
- 2万人将被裁!亚马逊史上最大裁员潮来袭
- 硅谷大厂裁员潮下的职场新人们:换个小厂接着卷
- 虹科分享|USB设备安全管理平台|USB软件加密不可接受的五个原因
- 开源:一款方便实用的数据库文档管理工具 - SmartSQL
- 三分钟安装Adobe Acrobat DC+附带学习教程--最牛逼的PDF编辑器
- 零代码连接邮箱&腾讯云企业网盘,附件管理超轻松
- 房企如何向制造业学习,提高运营效率,降本增效?
- 图灵机就是深度学习最热循环神经网络RNN?1996年论文就已证明!
- 传奇大神卡马克愤然离职!炮轰Meta效率低下,厌倦公司内斗
- 首次引入!用因果推理做部分可观测强化学习|AAAI 2023
- 特斯拉市值蒸发6000亿!马斯克:冻结招聘,明年裁员,再找个「傻子」接管推特
- 2022专治各种不服!硅谷精英跌落神坛,科技神话光环纷纷破灭
- 谷歌突然收紧绩效考评!要裁员不明说,CEO被员工开会「围攻」
- 要说创业之源,还得是谷歌!今年26位AI专家自立门户,投资人追着给钱
- 三体豆瓣跌破6分上热搜!光锥之内就是命运?罗辑被选为面壁者的原因找到了
- 寒潮来袭!2022年科技巨头市值蒸发近3万亿,马斯克身家缩水一半
- 斯坦福HAI发布最新白皮书:两年来,美国AI国家战略进展甚微!
- 人工智能300年!LSTM之父万字长文:详解现代AI和深度学习发展史