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

相关推荐
十五年专注C++开发1 天前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
ULIi096kr1 天前
MySQL解决Too many connections报错:连接数爆满排查、优化与永久解决方案
数据库·mysql·adb
李白的天不白1 天前
服务器上数据库的创建
mysql
ha_lydms1 天前
AnalyticDB基本概念
mysql·adb·analyticdb
Fanta丶1 天前
23.MySql group by优化、limit优化、 count优化、update优化
mysql
医疗信息化王工1 天前
医院自律端系统——预警处置模块全栈实战(ASP.NET Core + Vue3 + Quartz 定时调度)
mysql·postgresql·vue·asp.net core·quartz
NineData1 天前
SQL 都在等锁时,ChatDBA 先帮 MySQL 找到谁在挡路
数据库·人工智能·sql·mysql·安全·数据复制·数据迁移工具
神仙别闹1 天前
基于 PHP + MySQL学生信息管理系统
android·mysql·php
Amnesia0_01 天前
MYSQL复合查询和内外连接
数据库·mysql
Fanta丶1 天前
22.MySql order by优化
mysql