MVCC是如何保证隔离性的

之前提到了MVCC可以一定程度上避免幻读,那具体MVCC是咋工作的呢?

需要介绍两个机制:read view和聚簇索引的两个隐藏列

read view

这个就是我们理解的快照,有四个字段,本事务id、活跃事务id列表(包含自己)、活跃事务里id最小的(还没提交的事务里最早开始的)、下一个事务id(不一定是活跃事务列表中最大值+1)

聚簇索引中的隐藏列

trx_id代表本行数据是由哪个事务更新的,undo_log是关键的版本控制指针。就是用read view里的m_ids看这条记录对当前事务可见与否,可见就读不可见就顺着链表向下找。

工作方式

可重复读是启动事务时生成一个 Read View,然后整个事务期间都在用这个 Read View。

读提交是在每次读取数据时,都会生成一个新的 Read View。

相关推荐
踏过山河,踏过海1 小时前
Django自带的加密算法
数据库·django·sqlite
黑白极客1 小时前
如何判断一个数据库是不是出问题了?
数据库·mysql
不辉放弃2 小时前
Spark的累加器(Accumulator)
大数据·数据库·spark
aini_lovee2 小时前
python命令行解析模块argparse
服务器·前端·数据库
Chase_______2 小时前
redis快速入门及使用
java·数据库·redis·学习·spring·缓存
不辉放弃2 小时前
Spark的宽窄依赖
大数据·数据库·pyspark
noravinsc3 小时前
django 按照外键排序
数据库·django·sqlite
ALLSectorSorft3 小时前
相亲小程序聊天与互动系统模块搭建
java·数据库·sql·microsoft·oracle
鼠鼠我捏,要死了捏3 小时前
MySQL 索引设计与查询性能优化实践指南
数据库·mysql·性能优化