加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_安阳站长网 (https://www.0518zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

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

发布时间:2018-10-06 18:47:49 所属栏目:站长百科 来源:佚名
导读:副标题#e# 技术沙龙 | 邀您于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)源码浅析

(编辑:网站开发网_安阳站长网)

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