说下对mysql MVCC的理解

我们知道,mysql innodb存储引擎关于事务的默认隔离级别是RR,亦即可重复读。

而MVCC则是RR能够实现可重复读的保证,同时也是RC实现读已提交的保证。

我们先看下MVCC的原英与翻译:multi version concurrent control 多版本并发控制。

我就这个翻译来说道MVCC。它这里的多版本是啥意思?

首先,实现MVCC离不开:undoLog与readView。

undoLog我们应该都知道,存放的是事务更新日志记录,以备事务失败的回滚。

然后我们要知道,mysql每行记录,都有隐藏的db_trx_id(事务id),db_roll_point(回滚到undoLog的id),如果该行没主键则还会有个隐藏主键字段。

readView作为读视图,存放查询那一刻读视图快照,与行记录的trx_id做比较,小于readView的trx_id则记录可见,大于等于readView的trx_id的除了与readView的creator_trx_id一致的可见外,其余不可见。

依赖这两点,可以做到在并发读写事务的时候,既保证数据的安全性,又保证一定的性能。配合锁更可以保证可重复读的同时避免大部份幻读

相关推荐
言德斐2 小时前
SQL性能优化的思路及策略
数据库·sql·性能优化
码界奇点2 小时前
Django视图从基础到高级的全面解析
数据库·django·sqlite·web·python3.11
Allan_20252 小时前
数据库学习
数据库·学习
fen_fen2 小时前
人大金仓数据库kingbase8创建表示例
数据库·oracle
一勺菠萝丶2 小时前
「您的连接不是私密连接」详解:为什么 HTTPS 证书会报错,以及如何正确配置子域名证书
数据库·网络协议·https
²º²²এ松3 小时前
蓝牙低功耗(BLE)通信的中心设备/外围设备(连接角色)、主机/从机(时序角色)、客户端/服务器(数据交互角色)的理解
运维·服务器·数据库
百锦再3 小时前
Vue Scoped样式混淆问题详解与解决方案
java·前端·javascript·数据库·vue.js·学习·.net
数据库知识分享者小北4 小时前
云栖重磅|瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
数据库·人工智能·云原生
_Johnny_4 小时前
Redis 升级操作指南:单机与主从模式
数据库·redis·缓存
源力祁老师4 小时前
ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
xml·数据库·sql