浅浅的聊聊MySQL的MVCC

readView:

有三个字段

creator_trx_id:记录当前事务的id

min_trx_id:记录未提交事务的id

max_trx_id:记录未开始的事务id

解决的是一个事务查询选择版本的问题,在内部定义了一些匹配规则和当前的一些事务id判断该访问哪个版本的数据,不同的隔离级别快照读是不一样的,最终的访问的结果不一样。

如果是rc(read committed)隔离级别,每一次执行快照读时生成ReadView,根据当前事务ID去undolog中找已提交的事务(id<min_trx_id中的最小值),如果是rr(repeatable read)隔离级别仅在事务中第一次执行快照读时生成ReadView,后续复用。

MVCC本质:通过undolog实现多个版本,与readView进行CAS操作(乐观锁)获取对应的结果。

读未提交:不加锁,也没有MVCC,操作的是数据源

读已提交:使用MVCC,每一次查询都需要创建快照(readView)

可重复读:使用MVCC,只有第一次查询才会创建快照(readView)这样才会避免不可重复读

串行化:未使用MVCC,直接就是表锁,串行执行,性能最差,不到万不得已 不用。

相关推荐
唐青枫3 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
小满8783 天前
5.Mysql事务隔离级别与锁机制
mysql
元Y亨H4 天前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql
这个DBA有点耶5 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵5 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
SamDeepThinking5 天前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员
李白客7 天前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
Jim6009 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL9 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql