当前位置:网站首页>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不兼容。
边栏推荐
- "C language" frog jumping steps recursion problem
- DAY18: XSS vulnerability
- MySql database optimization query tool
- 动态顺序表的增删查改(C语言实现)
- Ceph single node deployment
- PHP中 比较 0、false、null,‘‘ “
- SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)
- MySQL table creation statement_Three commonly used MySQL table creation statements
- van-uploader上传图片,使用base64回显无法预览的问题
- 2022.07.15_Daily Question
猜你喜欢
2022.07.18 _ a day
超级详细的mysql数据库安装指南
2022.07.24_Daily Question
mysql安装教程【安装版】
Read Elephant Swap in one article, why does it bring such a high premium to ePLATO?
2022.07.12 _ a day
Pygame Surface对象
Machine Learning - Notes and Implementation of Linear Regression, Logistic Regression Problems
The Perfect Guide|How to use ODBC for Agentless Oracle Database Monitoring?
"C language game" entry-level chess game (robot enhanced version)
随机推荐
van-uploader上传图片,使用base64回显无法预览的问题
The first part of the R language
关于yum源的配置及更新
tqdm库的使用
interrupt and pendSV
PowerCLi 一键批量部署OVA 到esxi 7
Failure scenarios of @Transactional annotations
shell/bash脚本命令教程
MySQL 5.7详细下载安装配置教程
【C#】判断字符串中是否包含指定字符或字符串(Contains/IndexOf)
ZCMU--1862: zbj的狼人杀
Linux redis6.2.6 configuration file
uniapp 高度不自适应
报销流程|By天放师兄
XSS靶场prompt.ml过关详解
sqlmap使用教程大全命令大全(图文)
2022.07.13 _ a day
ros little turtle drawing
Client navicat installation tutorial
深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。