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中不可见,不在则可见。

相关推荐
AAA修煤气灶刘哥12 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud16 小时前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术19 小时前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
可涵不会debug1 天前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom1 天前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
麦兜*1 天前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
Slaughter信仰1 天前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*1 天前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
努力也学不会java1 天前
【设计模式】抽象工厂模式
java·设计模式·oracle·抽象工厂模式