MVCC到底是什么?这一篇博客就够啦

本文详细解析了MVCC(多版本并发控制)的概念、作用和在MySQL InnoDB中的实现原理,包括隐藏列、版本链、ReadView以及如何在不同事务隔离级别下处理并发问题,帮助读者深入理解MVCC如何提高数据库并发性能并避免读写冲突。
摘要由CSDN通过智能技术生成

MVCC简单理解

MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
这是百度百科给的标准的回答

转化成自己的语言:

多版本的意思就是数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在,在某个事务对其进行操作的时候,需要查看这一条记录的隐藏列事务版本id,比对事务id并根据事物隔离级别去判断读取哪个版本的数据。
这几个名词要记住,能通过博客把他们都搞懂就okok啦

  • 事务隔离级别
  • 一条完整的数据记录
  • undo日志
  • ReadView

MVCC的好处\作用

  1. MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读
  2. 我们都知道并发访问数据库造成的四种问题(脏写(修改丢失)、脏读、不可重复读、幻读),MVCC就是在尽量减少锁使用的情况下高效避免这些问题

数据库的四种隔离级别

隔离界别 脏读 不可重复读 幻读
READ UNCOMMITTED:未提交读 可能发生 可能发生 可能发生
READ COMMITTED:已提交读 解决 可能发生 可能发生
REPEATABLE READ:可重复读 解决 解决 可能发生
SERIALIZABLE:可串行化 解决 解决 解决

为什么没有脏写?
四种问题按照严重性排序:脏写 > 脏读 > 不可重复读 > 幻读
脏写这个问题太严重了,不论是哪种隔离级别,都不允许脏写的情况发生。

好!那下面就开始进入正题……

MVCC的实现原理

一、依赖于隐藏的两个列
我在之前的博客中提到过在InnoDB下的Compact行结构,有三个隐藏的列

列名 是否必须 描述
row_id 行ID,唯一标识一条记录(如果定义主键,它就没有啦)
transaction_id 事务ID
roll_pointer DB_ROLL_PTR是一个回滚指针,用于配合undo日志,指向上一个旧版本
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值