了解MVCC

概念

MVCC,全称Multi-Version Concurrency Control,即多版本并发控制,是一种并发控制的方法,维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现还要依赖数据库记录中的三个隐式字段,undo log,readView。

当前读

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select...lock in share mode(共享锁),select... for update、update、insert、delete(排他锁)都是一种当前读。

快照读

简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。

Read Committed:每次select,都生成一个快照读。

Repeatable Read:开启事务后第一个select语句才是快照读的地方。

Serializable:快照读会退化为当前读。

ibd2sdi ibd文件名 这条指令可以查看对应ibd文件中的信息。

undo log版本链

在执行修改操作前undo log会记录修改前的操作

执行修改后DB_TRX-ID和DB_ROLL_PTR都会进行相应的更新DB_TRX-ID更新为当前事务id DB_ROLL_PTR指向上一条记录在undo log中的存放地址

readview

min_ids 当前还未提交的事务id集合

min_trx_id 最小活跃事务id

max_trx_id 预分配事务id 当前最大事务id+1 因为事务id是自增的

creater_trx_id ReadView创建时的事务id

trx_id代表当前修改记录的事务id

当前隔离级别为RC

每执行一次快照读都会生成ReadView

这次读取的记录应该是DB_TRX-ID = 2 的数据

这次读取的记录应该是DB_TRX-ID = 3 的数据

当前隔离级别为RR

仅在事务第一次执行快照时生成ReadView后续复用

总结

redo log保证了事务的持久性

undo log保证了事务的原子性

redo log+undo log保证了事务的一致性

MVCC+锁保证了事务的隔离性

相关推荐
Elastic 中国社区官方博客4 分钟前
搜索倍增器:推动收入、生产力和 AI 实现规模化
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
东风破_1 小时前
从输入 juejin.cn 到看到页面:DNS、Nginx、服务器集群与 CDN 到底在做什么?
后端·mysql
小成很成1 小时前
mysql 8.0.21 升级 mysql 8.0.45(经过生产环境验证)
android·mysql·adb
东风破_1 小时前
从 0 设计一个博客数据库:用户、头像与文章表应该怎么建?
后端·mysql
保定公民2 小时前
达梦数据库存储过程中的数组类型详解:基础数组与记录数组的差异化应用
数据库·达梦·存储过程·达梦数据库·dm8·dm
秋饼2 小时前
JDK 27 企业级 AI 服务落地实战:G1 默认、紧凑对象头、后量子 TLS 与 JFR 脱敏全解析
java·ai·技术分享·后端开发
梦Arrebol3 小时前
Redis 内容及相关实验
数据库·redis
卓怡学长3 小时前
w176基于SpringBoot的医院管理系统
java·spring boot·spring·maven·intellij-idea
lemon_sjdk3 小时前
ObjectProperty
java·开发语言·算法
大模型码小白3 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring