InnoDB的MVCC
来源:互联网 发布:ubuntu 17.10 pinyin 编辑:程序博客网 时间:2024/06/06 20:22
MVCC(Multi-Version Concurrent Control)通过在每一行后面保存两个隐藏的列来实现的。这两个列,一个保存了行的建时间,一个保存了行的结束时间。当然存储的并不是实际的时间值,而是系统版本号。每开启一个新的事务,系统版本号都会自动递增。事务开启时刻的系统版本号会作为事务版本号,用来和查询到的每行记录的版本号进行比较。需要注意的是,MVCC只在RR和RC两个隔离级别下工作。
下面看下RR隔离级别下,MVCC具体是如何操作的:
SELECT
InnoDB会根据以下两个条件检查每条记录:
a. InnoDB只查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或等于系统版本号),这样可以确保读取的数据,要么在事务开始前就存在,要么是事务自身插入或者修改过的。(这句话说明select语句不会改变行的版本号)
b. 行的删除版本要么未定义,要么大于当前事务版本号,这样可以确保当前事物读取到的行,在事务开启之前未被删除。
INSERT
InnoDB为新插入的每一行保存当前系统版本号作为行版本号。
DELETE
InnoDB为删除的每一行保存当前系统版本号作为行删除标识。
UPDATE
InnoDB为插入一行新记录保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。
保存这两个额外的系统版本号的优势在于,可以使绝大多数读操作可以不加锁,性能很好,并且可以保证只能读到符合标准的行。不足之处在于每行都需要额外的存储空间。需要做更多的行检查,以及一些额外的维护工作
MVCC还可查阅这篇文章:
http://libisthanks.blog.163.com/blog/static/23527612320141016111027592/
间隙锁请看这边文章:
http://www.jianshu.com/p/bf862c37c4c9
- innodb的MVCC功能
- InnoDB的MVCC
- InnoDB中MVCC的实现
- 深入InnoDB的MVCC机制
- Innodb MVCC的实现分析
- innoDB的MVCC实现方式
- 浅谈InnoDB的MVCC策略
- InnoDB MVCC
- mvcc innodb
- 对innodb MVCC实现的一点点思考
- 辛星浅析InnoDB的MVCC实现
- InnoDB存储引擎MVCC的工作原理
- MVCC如何实现InnoDB的高并发
- InnoDB的MVCC如何解决幻读
- 关于innodb中MVCC的一些理解
- MySQL InnoDB MVCC原理
- InnoDB MVCC浅谈
- MySQL InnoDB MVCC原理
- keras搬砖系列-线性回归
- Stack Overflow
- C语言学习的第三天(续)
- 笔记整理
- (三十五)JVM虚拟机
- InnoDB的MVCC
- JS-0
- js在线测下载速度
- Centos7.4安装Apache2.4.23(详细步骤)
- Android——RecyclerView——LayoutManager全部源码翻译及注释 3000行代码 看到崩溃
- jQuery简介与选择器
- mysql查看库、表占用存储空间大小
- 17.12.6日报
- LeetCode 55. Jump Game