当前位置:网站首页>MySQL:已提交读和可重复读的实现原理 | MVCC(多版本并发控制)——笔记自用
MySQL:已提交读和可重复读的实现原理 | MVCC(多版本并发控制)——笔记自用
2022-08-09 04:13:00 【_索伦】
MVCC
MVCC是多版本并发控制(Multi-Version Concurrency Control,简称MVCC),是MySQL中基于乐观锁理论实现隔离级别的方式,用于实现已提交读和可重复读隔离级别的实现,也经常称为多版本数据库。MVCC机制会生成一个数据请求时间点的一致性数据快照 (Snapshot), 并用这个快照来提供一定级别 (语句级或事务级) 的一致性读取。从用户的角度来看,好象是数据库可以提供同一数据的多个版本(系统版本号和事务版本号)。
MVCC多版本并发控制中,读操作可以分为两类:
1、快照读(snapshot read)
读的是记录的可见版本,不用加锁。如select
2、当前读(current read)
读取的是记录的最新版本,并且当前读返回的记录。如insert,delete,update,select…lock in sharemode/for update
MVCC:每一行记录实际上有多个版本,每个版本的记录除了数据本身之外,增加了其它字段
DB_TRX_ID:记录当前事务ID
DB_ROLL_PTR:指向undo log日志上数据的指针
已提交读:每次执行语句的时候都重新生成一次快照(Read View),每次select查询时。
可重复读:同一个事务开始的时候生成一个当前事务全局性的快照(Read View),第一次select查询时。
快照内容读取原则:
1、版本未提交无法读取生成快照
2、版本已提交,但是在快照创建后提交的,无法读取
3、版本已提交,但是在快照创建前提交的,可以读取
4、当前事务内自己的更新,可以读到
undo log
undo log:回滚日志,保存了事务发生之前的数据的一个版本,用于事务执行时的回滚操作,同时也是实现多版本并发控制(MVCC)下读操作的关键技术。
DB_TRX_ID:事务ID
DB_ROLL_PTR:回滚指针
图示:在该图中,第一个事务id是1000,它利用(DB_ROLL_PTR)保存了上一个事务操作的地址
边栏推荐
- LeetCode题解—15.三数之和
- 关于微软2022/2023秋招内推的几句
- 浅谈进程与其创建方式
- Swift3.0 sets the background color and text color of the status bar
- 31 basic statistical concepts
- Device Reliability vs. Temperature
- Query the size of the total points obtained in a certain time period to sort
- gopacket源码分析
- 32 Basic Statistics - Hypothesis Testing
- FFmpeg编译支持x264/openH264/dash
猜你喜欢
随机推荐
了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:卡尔曼滤波器
配置网络接口的“IP“命令
《剑指offer》题解——week1(持续更新)
Polygon zkEVM Prover
剑指 Offer 56 - I. 数组中数字出现的次数
自动化测试的生命周期是什么?
技术分享 | 如何模拟真实使用场景?mock 技术来帮你
服务端修改Cookie——跨域cookie发送机——通信加密——异或加密
「竞品分析报告」不会写?不知从哪收集数据?请收下这篇竞品指南
了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法
wift3.0 set the navigation bar, title, font, item color and font size
Device Reliability vs. Temperature
发明时代,「幂集创新」事关你我
UI中级操作(倾斜和雷达效果)
器件可靠性与温度的关系
2022年熔化焊接与热切割考试模拟100题及在线模拟考试
【Pyspark】udf使用入门
MySql.Data.MySqlClient.DBNull
引用类型的浅拷贝与深拷贝小记
松柏集(云衣裳)