文章目录

  • MVCC是什么
  • MVCC的作用
  • MVCC的实现原理
  • Read View是什么
  • Read View如何判断某个版本可以访问

MVCC是什么

MVCC(Multiversion concurrency control)是同一行数据保留多版本的一种方式,进而实现并发控制。
在查询时,通过read view版本链找到对应版本的数据。

MVCC的作用

提升并发性能。对于高并发场景,MVCC比行级锁开销更小

MVCC的实现原理

MVCC的实现依赖于版本链,版本链通过表的三个隐藏字段实现:

  1. DB_TRX_ID:当前事务id(唯一)
  2. DB_ROLL_PRT:回滚指针,指向当前行记录的上一个版本
  3. DB_ROW_ID:主键,如果数据表没有主键,InnoDB会自动生成主键

表的某一行记录示例

它表示id=1,name=张三,age=19的这条行记录是由事务id=10的事务创建/修改

Read View是什么

read view可以理解为将数据在每个时刻的状态拍成“照片”记录下来。当需要获取时刻t的数据时,就从t时间拍的”照片“上获取数据。
Read View结构:

Read View如何判断某个版本可以访问

  1. trx_id == creator_trx_id修改这条行记录的事务如果和创建Read View(也就是查询这条行记录)的事务是同一个事务,那么就可以访问这个版本的行记录数据。
  2. trx_id < min_trx_id:行记录的事务id未提交的最小事务id还要小。说明修改该行记录的事务已经提交。该版本的事务可以被当前事务读取到。
  3. trx_id > max_trx_id:说明当前版本的事务是在生成Read View之后才产生,当前事务无法访问。
  4. min_trx_id <= trx_id <= max_trx_id
    1. 如果在m_ids中存在trx_id,说明是未提交的事务,不可访问
    2. 不存在,说明trx_id已经提交了,可以访问。

例如:
有如下两个事务

事务id=20的事务将id=1的行记录的name先改成李四,然后改成王五。
事务id=60的事务对其他表进行一些操作。

此时进行查询select * from users where id = 1,生成的Read View如下图:
此时未提交的事务有2060,所以m_ids为[20,60]
生成该Read View的是查询语句,所以creator_trx_id=0(一个事务只有对数据库的数据进行修改操作(增,删,改)的时候,才会为事务分配一个唯一事务id,查询操作的事务没有进行对数据进行修改操作,所以trx_id就是默认的0)

将行记录的每个版本的trx_id与时间轴对比,判断此版本是否可以访问

此时查询能查询到的数据应该是name=“张三”,原因如下表:

name trx_id == creator_trx_id trx_id < min_trx_id trx_id > max_trx_id min_trx_id <= trx_id <= max_trx_id 结果
王五 符合,但在m_ids中 无法访问
李四 同上 无法访问
张三 符合 可以访问

Mysql的MVCC是什么相关推荐

  1. MySQL的MVCC机制是什么?

    MySQL的MVCC机制是什么? MySQL的MVCC机制 Multiversion concurrency control 多版本并发控制并发访问(读或者写)数据库时,对正在事务内处理的数据做多版本 ...

  2. MySQL中MVCC+行级锁的工作机制(源码佐证)

    转自:https://blog.csdn.net/Waves___/article/details/105295060 序 最近在学习MySQL中的MVCC,看了网上的各种版本,什么创建版本号.删除版 ...

  3. MySQL的MVCC底层原理二

    承接上文MySQL的MVCC底层原理 上文说到时序图中的第12步这篇文章咱接着聊完 时序图 图1 时序图第12步中的查询事务的read-view情况 图2 read-view为[100,200],30 ...

  4. MySQL的MVCC底层原理

    MySQL的MVCC底层原理 图1 这是一个account表 有id和name字段 图2 MySQL底层会给表添加2个字段 一个是trx id(事务id)一个是roll pointer(回滚指针) 事 ...

  5. 个人对于MySQL的理解_面试官:谈谈你对Mysql的MVCC的理解?

    MVCC(Mutil-Version Concurrency Control),就是多版本并发控制.MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问. 在Mysql的In ...

  6. 【MySQL】MVCC多版本并发控制(重点:MVCC实现原理之ReadView)

    [大家好,我是爱干饭的猿,本文重点介绍MySQL的MVCC概念.快照读与当前读.MVCC实现原理之ReadView.隐藏字段.Undo Log版本链. 后续会继续分享MySQL和其他重要知识点总结,如 ...

  7. mysql的mvcc 和next-lock

    mysql在rr隔离级别下,是如何解决幻读的? mysql通过mvcc 及加上next-key lock来解决幻读发生的. 很多资料写的是rr隔离级别下是无法避免幻读的,的确是,理论上的rr是无法避免 ...

  8. 【Mysql】MVCC

    [Mysql]MVCC 文章目录 [Mysql]MVCC 1. 基本概念 1.1 当前读 1.2 快照读 1.3 MVCC 2. 隐藏字段 2.1 测试 3. undo log 3.1 介绍 3.2 ...

  9. 什么是MVCC,一文搞懂MySQL的MVCC机制

    MVCC是什么 MVCC,即Multi-Version Concurrency Control (多版本并发控制).它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中 ...

  10. Mysql的MVCC机制

    MVCC--多版本并发控制机制(Multi-Version Concurrency Control) Mysql的MVCC指多版本并发控制,Myql在读已提交和可重复读隔离级别下都实现了MVCC机制. ...

最新文章

  1. py2数据分析_利用数据
  2. 皮一皮:女友是有多么体贴...
  3. 在Mac终端下使用conda命令提示未找到命令conda
  4. Java实现仿百度文库文档在线阅读
  5. Zookeeper知识点详解
  6. winform闪屏问题解决方案
  7. C++:11---友元函数、友元类
  8. 《Accelerated C++中文版》--- 读书笔记
  9. linux usb免驱麦克风,Android无驱usb音频实现
  10. ping 代理_linux命令行代理神器-proxychains
  11. kali linux捉肉鸡教程,简单扫4899端口捉肉鸡菜鸟教程详细版
  12. vtkdelaunay3d的参数设置_VTK 渲染体数据并加方位标注
  13. Mac苹果电脑登录其他用户教程
  14. 计算机删除文件的原理,三个简单步骤,马上恢复被永久删除的文件
  15. 非浙A号牌迁入为浙A区域号牌条件与流程
  16. 世界人工智能大会开幕,云计算概念股大涨
  17. 如何利用TAM的API进行应用的开发
  18. iOS中Mach异常和signal信号介绍,以及当APP崩溃时做线程保活弹出程序异常提示框
  19. c++基础二(基本知识-基本内置 类型)
  20. img图片在webpack中使用

热门文章

  1. Gmap.net 怎么导入离线地图
  2. 为什么编程语言以及数据库要从1970年1月1日开始计算时
  3. centos 本地化配置
  4. 一阶电路中的时间常数_精确移相电路的设计举例
  5. SpringMvc异步请求的使用及部分原理
  6. Angular启动过程介绍
  7. 代码在eclipse下不报错,在doc命令行下报错--jar file和runable jar file
  8. php strip_tags 少,详解PHP函数 strip_tags的用法不足之处
  9. [转载] python循环中break、continue 、exit() 、pass的区别
  10. Java扫描仪toString()方法及示例