MySQL问题:MVCC是什么?

MVCC(多版本并发控制)是一种数据库并发控制技术,核心思想是通过维护数据的多个版本来实现高效的读写并发

MVCC工作原理:

数据版本链(事务ID和回滚指针链接成版本链)

ReadView(读视图)

ReadView中有四个字段,分别是:

m_ids:当前数据库中"活跃事务"(即启动了但没提交的事务)的事务id列表

min_trx_id:当前数据库中"活跃事务"中事务id最小的事务

Max_trx_id:当前数据库中应该给下一个事务的id值

Creator_trx_id:创建该ReadView的事务的事务id

除了这四个字段还要注意两个隐藏列在主键索引记录中

Trx_id:当事务对某条主键索引记录改动时,把该事务的事务id记录在这个列中

Roll_pointer:当事务对某条主键索引记录改动时,会把旧版本的记录写入undo日志中,这个隐藏列是个指针,指向每个旧版本记录

一个事务去访问记录的时候,除了自己的更新记录总是可见外,还有这几种情况:

1.如果trx_id<min_trx_id,代表这个记录是在创建ReadView前就提交的事务生成的,所以该版本的记录对当前事务可见。

2.trx_id>=max_trx_id,代表是创建ReadView后才启动的事务生成的,所以该版本的记录对当前事务不可见。

3.min_trx_id<trx_id<max_trx_id,也就是在之间,当trx_id在m_ids中不可见,不在则可见。

相关推荐
Alan_754 小时前
API 接口慢调用根因定位:从 TCP 建连到数据库 IO 的全栈排查实战
数据库
多巴胺梦想家5 小时前
事务与并发控制:当多人同时操作数据库
服务器·数据库·oracle
howard20056 小时前
PostgreSQL起步
数据库·postgresql
秋田君7 小时前
QT_QT布局详解
开发语言·数据库·qt
可乐ea7 小时前
【Redis八股|第8篇】Redis 分布式锁原理与 Redisson 使用
数据库·redis·分布式·面试题·redis八股
李燚7 小时前
Eino devops 调试系统源码:GraphCompileCallback 怎么工作(第50篇-E36)
数据库·golang·agent·devops·graphql·aiagent·eino
ClouGence8 小时前
Oracle 到 OceanBase 迁移方案横评:停机导出/导入 vs OMS vs CDC 工具
数据库·oracle
Meya11278 小时前
不同规模机房怎么选 U 位系统?8 柜小型机房、40 柜数据中心完整选型参考
服务器·网络·数据库
从此以后自律9 小时前
MySQL 删除数据全方式详解
数据库·mysql
青山木10 小时前
Redis 高可用的最后一公里:Cluster 分片、Gossip 与故障转移全流程
数据库·redis·后端·缓存