浅浅的聊聊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,直接就是表锁,串行执行,性能最差,不到万不得已 不用。

相关推荐
w***954917 小时前
mysql之如何获知版本
数据库·mysql
q_191328469518 小时前
基于Springboo和vue开发的企业批量排班系统人脸识别考勤打卡系统
前端·javascript·vue.js·spring boot·mysql·毕业设计·人脸识别
风吹落叶花飘荡18 小时前
mysql数据库创建新用户,并只给其必要的权限
数据库·mysql
月度空间19 小时前
MySQL主从复制+Redis集群 数据库高可用实战教程(2024最新版)
mysql
tyatyatya19 小时前
MySQL Group Replication(MGR)集群部署,实现自动故障切换
数据库·mysql
b***594319 小时前
mysql 迁移达梦数据库出现的 sql 语法问题 以及迁移方案
数据库·sql·mysql
j***894619 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
emma羊羊19 小时前
Vulhub-Mysql靶场
数据库·mysql
·云扬·20 小时前
MySQL四大系统库详解:作用、核心表与实用SQL查询
android·sql·mysql
Awkwardx21 小时前
MySQL数据库—MySQL复合查询
数据库·mysql