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。

相关推荐
小羊没烦恼!4 分钟前
浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色
前端·数据库·后端·python·web安全·oracle
hgf10117 分钟前
大内密探 · 案卷 1.2:一夫当关,万夫莫开(Receive Enable)
数据库·mysql
data analyse 45622 分钟前
页面卸载时埋点上报总丢失?sendBeacon 上报与补偿方案
大数据·运维·服务器·前端·数据库·人工智能·数据分析
企查查数据服务23 分钟前
充电桩集采准入:用企业数据做供应商失信批量核验
大数据·数据库·人工智能
敲上瘾31 分钟前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务
2501_933923251 小时前
MySQL CRUD 详解:表数据插入、更新与删除,附生产避坑指南
数据库·mysql
爱喝水的鱼丶3 小时前
SAP-ABAP:S/4 HANA ABAP 新特性入门:与 ECC ABAP 的核心差异、架构优势与学习路径规划
运维·数据库·性能优化·sap·abap·hana·开发交流
余槐i10 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹10 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo10 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql