加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL多版本并发控制机制(MVCC)源码浅析

发布时间:2018-10-09 14:08:11 所属栏目:编程 来源:佚名
导读:技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战 媒介 作为一个数据库喜爱者,本身下手写过简朴的SQL理会器以及存储引擎,但感受照旧不足过瘾。事宜处理赏罚-观念与技能诚然讲的很是透彻,但只能提要挈领,不能让你玩转某个真正的数据

由上面的lock_clust_rec_cons_read_sees可知,行版本可见性由read_view_sees_trx_id函数判定:

MySQL多版本并发节制机制(MVCC)源码浅析

着实上述函数就是一个二分法,read_view着实生涯的是当前活泼事宜的全部事宜id,假如当前行版本对应修改的事宜id不在当前活泼事宜内里的话,就返回true,暗示当前版本可见,不然就是不行见,如下图所示。

MySQL多版本并发节制机制(MVCC)源码浅析

接上述lock_clust_rec_cons_read_sees的返回:

MySQL多版本并发节制机制(MVCC)源码浅析

undolog搜刮可见版本的进程

我们此刻考查一下row_sel_build_prev_vers_for_mysql函数: 

  1. row_sel_build_prev_vers_for_mysql  
  2. |-row_vers_build_for_consistent_read 

首要是挪用了row_ver_build_for_consistent_read要领返回可见版本:

MySQL多版本并发节制机制(MVCC)源码浅析

整个进程如下图所示:

MySQL多版本并发节制机制(MVCC)源码浅析

至于undolog怎么规复出对应版本的row记录就又是一个伟大的进程了,因为篇幅缘故起因,在此略过不表。

read_view建设机缘再接头

在建设同等性视图的row_search_for_mysql的代码中

MySQL多版本并发节制机制(MVCC)源码浅析

trx_assign_read_view中由这么一段代码

MySQL多版本并发节制机制(MVCC)源码浅析

以是综合这两段代码,即在一个事宜中,只有第一次运行select(不加锁)的时辰才会建设同等性视图,如下图所示:

MySQL多版本并发节制机制(MVCC)源码浅析

笔者结构了此种场景模仿过,确实云云。

MVCC和锁的同时浸染导致的一些征象

MySQL是通过MVCC和二阶段锁(2PL)来分身机能和同等性的,可是因为MySQL仅仅在select时辰才建设同等性视图,而在update等加锁操纵的时辰并不做云云操纵,以是就会发生一些诡异的征象。如下图所示:

MySQL多版本并发节制机制(MVCC)源码浅析

假如领略了update不走同等性视图(read_view),而select走同等性视图(read_view),就可以很好表明这个征象。 如下图所示:

MySQL多版本并发节制机制(MVCC)源码浅析

总结

MySQL为了分身机能和ACID行使了大量伟大的机制,2PL(两阶段锁)和MVCC就是着实现的典范。幸好可以通过xcode等IDE举办利便的debug,这样就可以很是准确加便捷的追踪其各类机制的实现。但愿这篇文章可以或许辅佐到喜好研究MySQL源码的读者们。

【编辑保举】

  1. Java高级编程——MySQL索引实现及优化道理理会
  2. DBA的MySQL机能优化及自动化运维实践
  3. 为什么MySQL存储进程、函数和触发器对机能欠好
  4. SQL Server与MySQL中排序法则与字符集相干常识的一点总结
  5. MySQL 8.0新特征:彻底办理困扰运维的复制耽误题目,你信吗?
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读