Mysql的MVCC是什么
文章目录
- MVCC是什么
- MVCC的作用
- MVCC的实现原理
- Read View是什么
- Read View如何判断某个版本可以访问
MVCC是什么
MVCC(Multiversion concurrency control
)是同一行数据保留多版本的一种方式,进而实现并发控制。
在查询时,通过read view
和版本链
找到对应版本的数据。
MVCC的作用
提升并发性能。对于高并发场景,MVCC比行级锁开销更小
MVCC的实现原理
MVCC的实现依赖于版本链,版本链通过表的三个隐藏字段实现:
DB_TRX_ID
:当前事务id(唯一)DB_ROLL_PRT
:回滚指针,指向当前行记录的上一个版本DB_ROW_ID
:主键,如果数据表没有主键,InnoDB会自动生成主键
表的某一行记录示例
它表示id
=1,name
=张三,age
=19的这条行记录是由事务id
=10的事务创建/修改
Read View是什么
read view
可以理解为将数据在每个时刻的状态拍成“照片”记录下来。当需要获取时刻t的数据时,就从t时间拍的”照片“上获取数据。
Read View
结构:
Read View如何判断某个版本可以访问
trx_id == creator_trx_id
:修改这条行记录的事务如果和创建Read View(也就是查询这条行记录)的事务是同一个事务,那么就可以访问这个版本的行记录数据。trx_id < min_trx_id
:行记录的事务id
比未提交的最小事务id
还要小。说明修改该行记录的事务已经提交。该版本的事务可以被当前事务读取到。trx_id
>max_trx_id
:说明当前版本的事务是在生成Read View
之后才产生,当前事务无法访问。min_trx_id <= trx_id <= max_trx_id
:- 如果在
m_ids
中存在trx_id
,说明是未提交的事务,不可访问 - 不存在,说明
trx_id
已经提交了,可以访问。
- 如果在
例如:
有如下两个事务
事务id
=20的事务将id
=1的行记录的name
先改成李四,然后改成王五。
事务id
=60的事务对其他表进行一些操作。
此时进行查询select * from users where id = 1
,生成的Read View
如下图:
此时未提交的事务有20
和60
,所以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是什么相关推荐
- MySQL的MVCC机制是什么?
MySQL的MVCC机制是什么? MySQL的MVCC机制 Multiversion concurrency control 多版本并发控制并发访问(读或者写)数据库时,对正在事务内处理的数据做多版本 ...
- MySQL中MVCC+行级锁的工作机制(源码佐证)
转自:https://blog.csdn.net/Waves___/article/details/105295060 序 最近在学习MySQL中的MVCC,看了网上的各种版本,什么创建版本号.删除版 ...
- MySQL的MVCC底层原理二
承接上文MySQL的MVCC底层原理 上文说到时序图中的第12步这篇文章咱接着聊完 时序图 图1 时序图第12步中的查询事务的read-view情况 图2 read-view为[100,200],30 ...
- MySQL的MVCC底层原理
MySQL的MVCC底层原理 图1 这是一个account表 有id和name字段 图2 MySQL底层会给表添加2个字段 一个是trx id(事务id)一个是roll pointer(回滚指针) 事 ...
- 个人对于MySQL的理解_面试官:谈谈你对Mysql的MVCC的理解?
MVCC(Mutil-Version Concurrency Control),就是多版本并发控制.MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问. 在Mysql的In ...
- 【MySQL】MVCC多版本并发控制(重点:MVCC实现原理之ReadView)
[大家好,我是爱干饭的猿,本文重点介绍MySQL的MVCC概念.快照读与当前读.MVCC实现原理之ReadView.隐藏字段.Undo Log版本链. 后续会继续分享MySQL和其他重要知识点总结,如 ...
- mysql的mvcc 和next-lock
mysql在rr隔离级别下,是如何解决幻读的? mysql通过mvcc 及加上next-key lock来解决幻读发生的. 很多资料写的是rr隔离级别下是无法避免幻读的,的确是,理论上的rr是无法避免 ...
- 【Mysql】MVCC
[Mysql]MVCC 文章目录 [Mysql]MVCC 1. 基本概念 1.1 当前读 1.2 快照读 1.3 MVCC 2. 隐藏字段 2.1 测试 3. undo log 3.1 介绍 3.2 ...
- 什么是MVCC,一文搞懂MySQL的MVCC机制
MVCC是什么 MVCC,即Multi-Version Concurrency Control (多版本并发控制).它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中 ...
- Mysql的MVCC机制
MVCC--多版本并发控制机制(Multi-Version Concurrency Control) Mysql的MVCC指多版本并发控制,Myql在读已提交和可重复读隔离级别下都实现了MVCC机制. ...
最新文章
- py2数据分析_利用数据
- 皮一皮:女友是有多么体贴...
- 在Mac终端下使用conda命令提示未找到命令conda
- Java实现仿百度文库文档在线阅读
- Zookeeper知识点详解
- winform闪屏问题解决方案
- C++:11---友元函数、友元类
- 《Accelerated C++中文版》--- 读书笔记
- linux usb免驱麦克风,Android无驱usb音频实现
- ping 代理_linux命令行代理神器-proxychains
- kali linux捉肉鸡教程,简单扫4899端口捉肉鸡菜鸟教程详细版
- vtkdelaunay3d的参数设置_VTK 渲染体数据并加方位标注
- Mac苹果电脑登录其他用户教程
- 计算机删除文件的原理,三个简单步骤,马上恢复被永久删除的文件
- 非浙A号牌迁入为浙A区域号牌条件与流程
- 世界人工智能大会开幕,云计算概念股大涨
- 如何利用TAM的API进行应用的开发
- iOS中Mach异常和signal信号介绍,以及当APP崩溃时做线程保活弹出程序异常提示框
- c++基础二(基本知识-基本内置 类型)
- img图片在webpack中使用
热门文章
- Gmap.net 怎么导入离线地图
- 为什么编程语言以及数据库要从1970年1月1日开始计算时
- centos 本地化配置
- 一阶电路中的时间常数_精确移相电路的设计举例
- SpringMvc异步请求的使用及部分原理
- Angular启动过程介绍
- 代码在eclipse下不报错,在doc命令行下报错--jar file和runable jar file
- php strip_tags 少,详解PHP函数 strip_tags的用法不足之处
- [转载] python循环中break、continue 、exit() 、pass的区别
- Java扫描仪toString()方法及示例