Mysql MVCC

MVCC多版本并发控制本质就是每个事务读到的不是同一个正在被修改的数据,而是自己对应的历史版本快照。所以多个事务既然同时读又能同时写,读写互不阻塞,这就是数据库高并发的秘密武器。那历史版本怎么来的,是通过undo log ,数据库中只存了最新的一条记录,然后通过undo log记录反向操作(如insert一条数据,就在undo log中delete一条数据,update一条数据就在undo log留旧值),所以需要老版本时只要顺着这些日志往回找就可以,所以一条记录和undo log就串成了一条版本链。

那么当前事务可以看到版本链的哪一条呢?这就要通过ReadView,它会记录哪些事务已经提交,哪些还活跃,然后按照一套规则决定这个版本你能不能看。(具体就是自己改的永远能看,比自己再提交的能看,还没提交的不能看)

在不同隔离级别下的区别:读已提交每次查询都会重新生成一个ReadView,所以前后两次select的结果可能不一样就,也就是不可重复读;而可重复读只在第一次查询时生成ReadView后面一直直接用这个快照,所以整个事务多次查询结果保持一致,这就是可重复读。

总结,MVCC的核心是快照读,Undo log是历史版本的支撑,ReadView决定谁能看那个版本

相关推荐
qq_1927798712 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
u01092727113 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊13 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
tudficdew13 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
Fleshy数模14 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
sjjhd65214 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
Configure-Handler14 小时前
buildroot System configuration
java·服务器·数据库
2301_8213696114 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
az44yao15 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
电商API_1800790524715 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫