图解MVCC

MVCC(多版本并发控制)是数据库中用于并发控制的技术,主要用于实现提交读和可重复读的隔离级别。本文深入讲解了MVCC的工作原理,包括Undo Log和Read View,帮助读者理解MVCC如何在不加锁的情况下处理并发事务,以及如何防止脏读、不可重复读等问题。
摘要由CSDN通过智能技术生成

前言

大家好,我是fancy呀。

在上一篇关于MySQL的文章中,我讲到了事务的特性、隔离级别和并发一致性问题。其中我们说到了数据库的四个隔离级别,并说明MVCC是实现了提交读,可重复读的重要手段。

MVCC也是MySQL数据库中一个老生常谈的话题了,但是由于它较为底层,实际的开发日常中我们并不会去直接接触它,所以真正将它弄明白的人并不多,许多面试者,提到它很多人都处于:“哦,这个东西我知道!是数据库中的一种并发措施,但是我有点忘记了它的详细内容了...”这样的状态。

所以本篇文章,就来详细讲一讲”MVCC”,带大家理清楚MVCC的内容。

话不多说,列大纲,发车!

什么是MVCC?

MVCC((Mutil-Version Concurrency Control)),全称多版本并发访问,这是一种并发环境下进行数据安全控制的方法,其本质上是一种乐观锁,用于实现提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别。在这里我先为大家理清楚一个概念:我们常说的MVCC是由MySQL数据库InnoDB存储引擎实现的,并非是由MySQL本身实现的,不同的存储引擎,对MVCC都有不同的实现标准。所以当你在面试官面前说:”MySQL使用了MVCC实现了xxxxxx“,面试官一下子就把你给逮住了,说明你连MySQL和InnoDB之间的关系都模糊不清。

那么,当你听到了“多版本”、“并发访问”这两个词,你也许就知道了,InnoDB使用MVCC来解决并发问题的方法,就是让每个不同的事务访问查询同一行数据时,每个事务修改的都是这行数据的不同版本,InnoDB只需要去记录这个数据的访问链,就可以实现一个SELECT操作的并发执行。

那么,它具体是如何实现的呢?

MVCC利用了多版本的思想,在 MVCC 中事务的所有写操作(INSERT、UPDATE、DELETE)会为数据行新增一个最新的版本快照,而读操作是去读旧版本的快照,也就是说,读操作和写操作是分离的,二者之间没有依赖、互斥关系。

核心

Undo Log

什么是Undo Log?

Undo Log是MySQL的三大日志之一,当我们对记录做了变更操作时就会产生一条Undo记录。它的作用就是保护事务在异常发生的时候或手动回滚时可以回滚到历史版本数据,能够让你读取过去某一个时间点保存的数据。通俗易懂地说,它只关心过去的数据

本文我们不会对Undo Log的作用做太多描述,你需要重点知道的是:对于一个InnoDB存储引擎,一个聚簇索引(主键索引)的记录之中,一定会有两个隐藏字段trx_idroll_pointer,这两个字段存储于B+树的叶子节点中,分别对应记录着两列信息:

trx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值