mysql-mvcc
创始人
2025-05-29 09:02:05

1. mvcc 实现原理

基于 隐藏字段、undo log、read view
多版本 指的是 undo log 的回滚链
并发控制管理 read view+隐藏列

2. 快照读 当前读

处理读-写冲突,读使用快照读,当前读是加锁的操作。

2.1 快照读

不加锁的读

select * from user where...

2.2当前读

加锁

3.隐藏字段 undo log 版本链

隐藏字段 trx_id roll_pointer

  • trx_id:每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的事务id赋值给trx_id隐藏列。
  • roll_pointer:每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。
    假设插入该记录的事务id8,那么此刻该条记录的示意图如下所示:a

undo log 版本链

每次对记录进行改动,都会记录一条undo日志,每条undo日志也都有一个roll_pointer属性(INSERT操作对应的undo日志没有该属性,因为该记录并没有更早的版本),可以将这些undo日志都连起来,串成一个链表:
3
对该记录每次更新后,都会将旧值放到一条undo日志中,就算是该记录的一个旧版本,随着更新次数的增多,所有的版本都会被roll_pointer属性连接成一个链表,我们把这个链表称之为版本链,版本链的头节点就是当前记录最新的值。

4.mccc 实现原理 read view

4.1 什么是read view

read view 在一个事物在使用mvcc机制进行快照读操作时产生的读视图

4.2 设计思路

mvcc 针对 读已提交 可重复读

4个重要内容

  • creator_trx_id 创建read view 的 事物id
  • trx_ids 在生成read view 时,当前系统活跃的(“活跃"指的就是,启动了但还没提交) 读写事物的id列表
  • up_limit_id 活跃的事物 的最小id
  • low_limit_id 系统最大的事物id

注意:low_limit_id并不是trx_ids中的最大值,事务id是递增分配的。比如,现在有id为 1 ,2 , 3 这三个事务,之后id为 3 的事务提交了。那么一个新的读事务在生成ReadView时,trx_ids就包括 1 和 2 ,up_limit_id的值就是 1 ,low_limit_id的值就是 4 。

例子
trx_ids为tr2、tr3、tr:5和trx8的集合,系统的最大事务ID (low_limit_id)为trx8+1(如果之前没有其他的新增事务),活跃的最小事务ID (up_limit_id)为trx2。

2

4.3 规则

4.4 操作流程

lnnoDB中,MVCC是通过Undo Log + Read View进行数据读取,Undo Log保存了历史快照,而Read View规则帮我们判断当前版本的数据是否可见。

了解了这些概念之后,我们来看下当查询一条记录的时候,系统如何通过MVCC找到它:

  1. 首先获取事务自己的版本号,也就是事务 ID;
  2. 生成 ReadView;
  3. 查询得到的数据,然后与 ReadView 中的事务版本号进行比较;
  4. 如果不符合 ReadView 规则,就需要从 Undo Log 中获取历史快照;
  5. 最后返回符合规则的数据。

4.5 隔离级别不同 每次select 每次readview

4.5.1 read commited

在隔离级别为读已提交(Read Committed)时,一个事务中的每一次 SELECT 查询都会重新获取一次Read View。

如表所示:

事务说明
begin;
select * from student where id >2;获取一次Read View
select * from student where id >2;获取一次Read View
commit;

此时同样的查询语句都会重新获取一次 Read View,这时如果 Read View 不同,就可能产生不可重复读或者幻读的情况。

4.5.2 repeat read

当隔离级别为可重复读的时候,就避免了不可重复读,这是因为·一个事务只在第一次 SELECT 的时候会获取一次 Read View,而后面所有的 SELECT 都会复用这个 Read View,如下表所示:
2

5. mvcc 解决幻读

相关内容

热门资讯

上海大众途观价格(上海大众途观... 本篇文章极速百科给大家谈谈上海大众途观价格,以及上海大众途观价格表对应的知识点,希望对各位有所帮助,...
怎么开罐子盖子(怎么开罐子盖子... 今天给各位分享怎么开罐子盖子的知识,其中也会对怎么开罐子盖子视频进行解释,如果能碰巧解决你现在面临的...
西安到兰州(西安到兰州的高铁票... 本篇文章极速百科给大家谈谈西安到兰州,以及西安到兰州的高铁票对应的知识点,希望对各位有所帮助,不要忘...
1000毫升等于多少斤(100... 今天给各位分享1000毫升等于多少斤的知识,其中也会对1000毫升等于多少斤怎么算进行解释,如果能碰...
徐州到洛阳(徐州到洛阳坐火车多... 本篇文章极速百科给大家谈谈徐州到洛阳,以及徐州到洛阳坐火车多长时间对应的知识点,希望对各位有所帮助,...
祝贺新年的诗句(新年诗句大全唯... 本篇文章极速百科给大家谈谈祝贺新年的诗句,以及新年诗句大全唯美对应的知识点,希望对各位有所帮助,不要...
公交乘车码怎么用(公交乘车码怎... 本篇文章极速百科给大家谈谈公交乘车码怎么用,以及公交乘车码怎么用微信对应的知识点,希望对各位有所帮助...
临沂违章查询(临沂违章查询ap... 本篇文章极速百科给大家谈谈临沂违章查询,以及临沂违章查询app对应的知识点,希望对各位有所帮助,不要...
左转弯闯红灯三张图解(左转弯闯... 本篇文章极速百科给大家谈谈左转弯闯红灯三张图解,以及左转弯闯红灯三张图解中途停止对应的知识点,希望对...
解除etc需要什么手续(解除e... 今天给各位分享解除etc需要什么手续的知识,其中也会对解除etc需要什么手续费用进行解释,如果能碰巧...
昆明交通违章查询(昆明交通安全... 今天给各位分享昆明交通违章查询的知识,其中也会对昆明交通安全网违章查询进行解释,如果能碰巧解决你现在...
变道(变道不打灯怎么处罚) 变... 本篇文章极速百科给大家谈谈变道,以及变道不打灯怎么处罚对应的知识点,希望对各位有所帮助,不要忘了收藏...
xfx是什么(xfx的网络语是... 今天给各位分享xfx是什么的知识,其中也会对xfx的网络语是什么进行解释,如果能碰巧解决你现在面临的...
卡罗拉双擎真实缺点(卡罗拉双擎... 本篇文章极速百科给大家谈谈卡罗拉双擎真实缺点,以及卡罗拉双擎真实缺点有哪些对应的知识点,希望对各位有...
新手炒现货怎么入门(炒现货技巧... 本篇文章极速百科给大家谈谈新手炒现货怎么入门,以及炒现货技巧对应的知识点,希望对各位有所帮助,不要忘...
郑州地铁3号线(郑州地铁3号线... 今天给各位分享郑州地铁3号线的知识,其中也会对郑州地铁3号线北延长线最新消息进行解释,如果能碰巧解决...
锂电池寿命(锂电池寿命最长多少... 今天给各位分享锂电池寿命的知识,其中也会对锂电池寿命最长多少年进行解释,如果能碰巧解决你现在面临的问...
成都到自贡(成都到自贡汽车时刻... 今天给各位分享成都到自贡的知识,其中也会对成都到自贡汽车时刻表进行解释,如果能碰巧解决你现在面临的问...
g1924高铁时刻表(高铁g1... 本篇文章极速百科给大家谈谈g1924高铁时刻表,以及高铁g1924路线对应的知识点,希望对各位有所帮...
五菱小卡单排1.5报价(五菱小... 本篇文章极速百科给大家谈谈五菱小卡单排1.5报价,以及五菱小卡单排15报价图片对应的知识点,希望对各...
吉利帝豪ec7(吉利帝豪ec7... 今天给各位分享吉利帝豪ec7的知识,其中也会对吉利帝豪ec718参数配置进行解释,如果能碰巧解决你现...
起亚越野车(起亚越野车型) 起... 今天给各位分享起亚越野车的知识,其中也会对起亚越野车型进行解释,如果能碰巧解决你现在面临的问题,别忘...
有酒后驾驶违法行为的(有酒后驾... 今天给各位分享有酒后驾驶违法行为的的知识,其中也会对有酒后驾驶违法行为的处罚进行解释,如果能碰巧解决...
g2215(g2215次列车途... 本篇文章极速百科给大家谈谈g2215,以及g2215次列车途经站点对应的知识点,希望对各位有所帮助,...
孔明斩魏延的歇后语是什么(孔明... 今天给各位分享孔明斩魏延的歇后语是什么的知识,其中也会对孔明斩魏延的歇后语下一句是什么进行解释,如果...
奇瑞发动机世界排名(奇瑞发动机... 本篇文章极速百科给大家谈谈奇瑞发动机世界排名,以及奇瑞发动机质量如何对应的知识点,希望对各位有所帮助...
国足1比1战平沙特是哪一年(国... 今天给各位分享国足1比1战平沙特是哪一年的知识,其中也会对国足1比0沙特球迷进行解释,如果能碰巧解决...
如何鉴别端砚(如何鉴别端砚白端... 今天给各位分享如何鉴别端砚的知识,其中也会对如何鉴别端砚白端进行解释,如果能碰巧解决你现在面临的问题...
断片啥意思(断片啥意思猜一个数... 本篇文章极速百科给大家谈谈断片啥意思,以及断片啥意思猜一个数字对应的知识点,希望对各位有所帮助,不要...
宝马535多少钱一辆(宝马53... 今天给各位分享宝马535多少钱一辆的知识,其中也会对宝马535多少钱一辆啊进行解释,如果能碰巧解决你...