通俗理解 mysql 的mvcc机制
mvcc (多版本并发控制),开启多个事务,并基于快照读Read View实现;
Read View几个属性
trx_ids: 当前系统活跃事务版本号集合;
low_limit_id: 创建当前read view 时, 系统最大事务版本号+1;
up_limit_id: 创建当前read view 时, 活跃事务最小版本号;
creator_trx_id: 创建当前read view的事务版本号;
read_view 可见性规则:
1.数据事务ID小于read view中的最小活跃事务ID,即trx_id<up_limit_id,
说明数据是在当前事务生成read view之前就已经存在了,则显示
2.数据事务ID大于或等于read view 中的当前系统的最大事务ID,即trx_id>low_limit_id,
说明该数据是在当前read view 创建之后才产生的,则不显示
3.trx_id = creator_trx_id,是本事务产生的数据,则显示
4.被访问版本的trx_id,在readview的min_trx_id和max_trx_id之间,则需要判断trx_id值是否在m_ids列表中
如果在:说明创建readview时,该版本的事务还未提交,通过回滚指针查找历史版本并返回;
如果不在:说明创建readview时,该版本的事务已经提交,所以直接返回该版本的数据
结合具体列子,
准备一张表,字段为id,age,当我们插入一条数据的时候,mysql会增加几个隐藏字段,不会展示给我们用户,其中一个字段为事务id,即trx_id
准备三个事务,分别更新数据,trx_id是隐藏的,这里列出来方便说明
id | age | trx_id | point | |
事务1 | 1 | 1 | 1 | 指针 |
事务2 | 1 | 2 | 2 | 指针 |
事务3 | 1 | 3 | 3 | 指针 |
注:这个不是表数据,事务提交或者回滚后,只有一条
首先,开启事务1,插入一条数据id=1,age=1 这时隐藏列trx_id的值假如为1,以后的事务在此基础上依次增长,提交事务,这时数据库里就有一条数据了。
情景1
开启事务2,执行查询操作,
那么trx_id=2,mysql会记录开启是这个事务时的事务数据,包括目前存活的事务id列表trx_ids,值为2
最大事务id ,活跃的最大事务id+1,low_limit_id 为3;
最小事务id,up_limit_id 为2;
自己的事务版本,creator_trx_id为2
开启事务2执行查询全表的操作,表中生成id为1的数据的事务id为1,即trx_id 1<2,显示id=1的这条数据;
情景2
开启事务2,事务执行查询之前,开启了事务3,并更新为id=1,age=3,提交完成,此时事务2查询,id=1的这条数据的trx_id为3,即trx_id 3>=3,不会显示age=3的这条数据,通过回滚直接读取历史版本,显示age为1的数据
情景3
开启事务2,事务3,事务3执行更新,未提交,
事务2执行查询操作,活动的事务trx_ids列表为(2,3),low_limit_id为4,up_limit_id为2
age为3的记录的trx_id处于 2 <= 3 <4,3在 trx_ids中,不显示这个版本的数据;
情景4
开启事务2,事务3,事务3执行更新并提交,
事务2执行查询操作,活动的事务trx_ids列表为(2),low_limit_id为4,up_limit_id为2
age为3的记录的trx_id处于 2 <= 3 <4,3不在 trx_ids中,显示这个版本的数据;
通俗理解 mysql 的mvcc机制相关推荐
- 轻松理解MySQL的MVCC机制
PS:本文需要一点MySQL原理的前置知识 MVCC MVCC(Multi Version Concurrency Control),也叫多版本并发控制,顾名思义,就是通过记录的多个版本来实现数据 ...
- 什么是MVCC,一文搞懂MySQL的MVCC机制
MVCC是什么 MVCC,即Multi-Version Concurrency Control (多版本并发控制).它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中 ...
- 面试必备,MySQL InnoDB MVCC机制
MySQL InnoDB MVCC机制吐血总结 谈到MySQL事务,必然离不开InnoDB和MVCC机制,同时,MVCC也是数据库面试中的杀手问题,写这篇总结的目的,就是为了让自己加深映像,这样面试就 ...
- 【MySQL笔记】正确的理解MySQL的MVCC及实现原理
MVCC多版本并发控制 如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里 !首先声明,MySQL 的测试环境是 5.7 前提概要 什么是 MVCC 什么是当前读和快照读 ...
- MySQL的MVCC机制是什么?
MySQL的MVCC机制是什么? MySQL的MVCC机制 Multiversion concurrency control 多版本并发控制并发访问(读或者写)数据库时,对正在事务内处理的数据做多版本 ...
- MySQL的MVCC机制看完这篇你还不懂,算我输
前言 MySQL中大名鼎鼎的MVCC机制想必大家都有所耳闻吧,虽然在平时MySQL使用过程中基本上用不到,但是面试中出场率十分高,而且作为架构师的你也是需要知道它的工作机制.那么你对MVCC机制了解多 ...
- MySQL InnoDB MVCC机制吐血总结
原文:https://www.jianshu.com/p/d67f0329d3bf 谈到MySQL事务,必然离不开InnoDB和MVCC机制,同时,MVCC也是数据库面试中的杀手问题,写这篇总结的目的 ...
- oracle的mvcc解析,PostgreSQL原理:Oracle 和 MySQL 中MVCC机制详解
MVCC,Multi-version Concurrency Control ,顾名思义指的是多版本并发控制.在介绍MVCC之前我们先来简单了解下事务的隔离级别: read uncommitted:脏 ...
- Mysql的MVCC机制
MVCC--多版本并发控制机制(Multi-Version Concurrency Control) Mysql的MVCC指多版本并发控制,Myql在读已提交和可重复读隔离级别下都实现了MVCC机制. ...
最新文章
- mysql象限和投影_Camera类之orthographic-摄像机投影模式(第100篇随笔)
- Java实现简单的队和栈
- 记录之pytorch中文文档
- apk之间数据共享的方式
- (多源转化成单源dijsktra)一个人的旅行
- lua——赢三张牌型处理相关算法(中)——牌型判定
- python2和3通用的头文件写法 不确定是否叫头文件 这种说法 大概就是这个意思
- Atitit 知识管理 知识体系专业分类介绍
- excel多个窗口独立显示_办公软件操作技巧060:如何快速切换excel工作簿
- 联发科6758_OPPO新机使用联发科天玑720处理器,整体性能到底怎么样?
- web服务之LAMPLNMP架构
- LocalDate的用法与String互转
- http://nian.so/#网站的拓展工具编写
- 图片尺寸px怎么转换成厘米?在线图片尺寸换算工具怎么用?
- 松下电视机竟暗藏魂斗罗游戏(哈哈哈)
- 服装搭配软件测试自学,五大穿搭App评测推荐,轻松解决你的日常穿搭烦恼!
- HBase:Hive与HBase的整合
- linux下登录ftp
- 有铅焊锡丝与无铅焊锡丝的性能差异大解析
- galgame 游戏动画汉化(动画外挂字幕)和字幕合成方法
热门文章
- Android字体大小怎么自适应不同分辨率?
- 评测三款最流行的azw3阅读器(ios手机适用)
- iOS 中如何添加应用自己的字体,使用萍方体
- ZYH‘s 冬季片单
- js逆向之携程酒店房价抓取
- 如何计算两个日期之间相隔的天数?calendar的用法
- 2022年中国互联网招聘行业发展现状及行业优化策略分析[图]
- 计算机二级office考试试题分布,计算机二级MS-OFFICE考试ECEL题型汇总附答案.pdf
- 阶梯电价计算:电价分三个档次,一档:0~110(含110)度电,每度电0.5元;二挡:110~210(含210)度电,超出110部分每度电0.55元;三挡:超过210度电,超出210部分每度电0.70
- 阶梯电价问题解决方法