当前位置:网站首页>MySQL中InnoDB的多版本并发控制(MVCC)的实现
MySQL中InnoDB的多版本并发控制(MVCC)的实现
2022-07-31 07:34:00 【wowchx】
MySQL的大多事务型存储引擎实现的都不是简单的行级锁,基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。
MVCC的实现,是通过保存数据在某个时间点的快照来实现的。它在很多情况下避免了加锁操作,因此性能开销更低。虽然各个数据库的MVCC实现机制略有差异,但大都实现了非阻塞的读操作,今天我们来详细介绍一下InnoDB存储引擎中MVCC的实现。
InnoDB的MVCC,是通过在每行记录后面保存的两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。
SELECT
InnoDB会根据以下两个条件检查每行记录
1.InnoDB只查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的。
2.行的删除版本要么未定义,要么大于当前事务版本号。这可以确保事务读取到的行,在事务开始之前未被删除。
只有符合上述两个条件的记录,才能返回作为查询结果。
INSERT
InnoDB为新插入的每一行保存当前系统版本号作为行版本号。
DELETE
InnoDB为删除的每一行保存当前系统版本号作为行删除标识。
UPDATE
InnoDB为插入一行新纪录,保存当前系统版本号作为行版本号名同时保存当前系统版本号到
原来的行作为行删除标识
特别注意,MVCC只在REPEATABLE READ和READ COMMITTED两个隔离级别下工作,其他两个隔离级别都和MVCC不兼容。
边栏推荐
猜你喜欢
随机推荐
Collation and sharing of related classic papers and datasets in the field of deep learning communication
MySQL安装教程
shell/bash脚本命令教程
PowerCLi 一键批量部署OVA 到esxi 7
CY7C68013A之LED闪烁
van-uploader uploads images, and cannot preview the image using base64 echo
会话技术之Coookie && Session详解
MySQL 5.7升级到8.0详细过程
【C#】说说 C# 9 新特性的实际运用
48页智慧城市规划蓝图 解决方案
2022.07.15_Daily Question
正则表达式绕过
MySql 5.7.38下载安装教程 ,并实现在Navicat操作MySql
DAY18: Xss Range Clearance Manual
Ceph single node deployment
7/28-7/29 期望+思维+后缀数组+ST表
mysql安装教程【安装版】
任务及任务切换
客户端navicat安装教程
Ceph单节点部署