简介
本文介绍MySQL的隔离级别的实现方式–MVCC。
这也是Java后端面试题中常见的一个问题。
MVCC简介
MVCC(Multi-Version Concurrency Control),含义为:多版本并发控制。
在并发访问的时候,数据存在版本的概念,可以有效地提升数据库并发能力,常见的数据库如MySQL、MS SQL Server、IBM DB2、Hbase、MongoDB等等都在使用。
简单讲,如果没有MVCC,当想要读取的数据被其他事务用排它锁锁住时,只能互斥等待;而MVCC可以通过提供历史版本从而能够读取被锁的数据(的历史版本),避免了互斥等待。
在 MySQL中,MVCC是 InnoDB 存储引擎实现隔离级别的一种具体方式。
- 未提交读:无需使用 MVCC(总是读取最新的数据行)
- 提交读和可重复读:使用MVCC来实现。
- 可串行化:需要对所有读取的行都加锁,单纯使用 MVCC 无法实现。
MVCC一般有两种实现方式(本文所讲的InnoDB采用的是后者)
- 实时保留数据的一个或多个历史版本
- 在需要时通过undo log构造出历史版本
MVCC原理
说明
事务ID是在MySQL开启事务时为其分配的递增序列号,由于是递增的,所以可以基于此判断事务先后关系。
此内容仅限VIP查看,请先登录
请先
!