MySQL --- 读书笔记 --- MVCC
2022/5/23 2:02:54
本文主要是介绍MySQL --- 读书笔记 --- MVCC,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 什么是MVCC
MVCC(Multiversion Concurrency Control),多版本并发控制,通过数据行的多个版本管理来实现数据库的并发控制,使得在事务隔离级别下执行一致性读有了保证。MVCC没有正式标准。
2. 快照读与当前读
快照读
又叫一致性读,读取的是快照数据。不加锁的简单SELECT都属于快照读
前提是,当前隔离级别不是串行,串行会退化为当前读
当前读
读取的是最新数据,还要保证读取时,其他并发事务不能修改当前数据,会对读取记录加锁
4. MVCC实现原理之ReadView
MVCC的实现依赖于:隐藏字段、undo log、read view
4.1 什么是ReadView
多个事务对记录的修改,会产生多个历史版本,这些历史记录都在 undo log 中,当需要读取时,读取哪个历史版本,就需要用到ReadView
。
ReadView
就是事务在进行快照读时产生的视图,当事务启动,会生成数据库系统当前的快照。InnoDB为每个事务构造了一个数组,用来记录并维护当前活跃事务
的ID
核心问题是需要判断一下历史版本中的哪个版本是当前事务可见的,这是ReadView
要解决的主要问题
4.2 设计思路
ReadView包含4个比较重要的内容
- creator_trx_id:创建当前ReadView的事务
- trx_ids:生成ReadView时,当前系统的活跃事务ID列表
- up_limit_id:活跃事务中最小ID
- low_limit_id:表示生成ReadView时系统应该分配给下一个事务的ID(不是指的活跃ID)
4.3 规则
有了ReadView
后,按照以下规则判断记录的某个版本是否可见
- 如果被访问的版本的
trx_id
与creator_trx_id
一致,当前事务在访问它自己修改过的记录,该版本可见 - 如果被访问的版本的
trx_id
小于up_limit_id
,表明生成该版本的事务已经在生成ReadView之前提交,该版本可见 - 如果被访问的版本的
trx_id
大于或等于low_limit_id
,表明生成该版本事务在生成ReadView之后创建,该版本不可见 - 如果被访问的版本的
trx_id
在up_limit_id
和low_limit_id
之间,需要判断是否在trx_ids
中- 在,事务活跃,不可见
- 不在,事务已提交,可见
这篇关于MySQL --- 读书笔记 --- MVCC的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7
- 2024-02-18从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践
- 2024-02-07mysql 外键索引入门介绍,为什么工作中很少有人使用?