【MySQL性能优化】- 一文了解MVCC机制

本文详细解释了MySQL中的多版本并发控制(MVCC)原理,包括其在undo日志版本链和read-view机制中的应用,以及在可重复读和读已提交隔离级别中的表现。通过实例展示了MVCC如何提高数据库并发性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL理解MVCC

😄生命不息,写作不止
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 博客首页   @怒放吧德德  To记录领地
🌝分享学习心得,欢迎指正,大家一起学习成长!
转发请携带作者信息 @怒放吧德德 @一个有梦有戏的人

在这里插入图片描述


转发请携带作者信息 @怒放吧德德 @一个有梦有戏的人

简介

多版本并发控制(MVCC,Multi-Version Concurrency Control)是一种常用于数据库管理系统的并发控制方法,MySQL数据库中的InnoDB存储引擎就实现了这种技术。MVCC通过在每个事务中对数据进行版本控制来实现多个事务的高效并发执行,增强了数据库的读写性能,并且减少了锁的需求。

理解MVCC

在MySQL的可重复读的隔离级别中,同样的SQL查询语句在同一个事务中,查出来的数据是一致的,其他事务对这些数据进行修改,当前事务是不可见的。
这个隔离级别就是由MVCC机制来实现的。对一行数据并不会通过对读和写加互斥锁来保证隔离性,避免了频繁加锁互斥,而串行化隔离级别是通过读写互斥实现。

MySQL中读以提交和可重复读隔离级别都是通过MVCC。

undo日志版本链

undo日志版本链是指一行数据被多个事务依次修改后,为了保持数据修改之前版本的可访问性,InnoDB不会直接覆盖旧数据。会将数据的旧版本保存到undo日志中,并且用隐藏字段trx_id(事务id)和roll_pointer(回滚指针)将这些日志串联起来成为一组历史版本链。

这个undo日志不只是保存单个版本,而是随着时间推移和更多事务的执行,可能保存同一数据项的多个历史版本。这些历史版本形成一个链条,称为版本链。当需要某个记录的历史状态时,可以通过回滚undo日志中的操作来获取旧版本数据,或者在不同隔离级别的读取事务中适当地提供旧数据,以此来保证一致性读取。

如下图,可以很好的理解什么是undo日志版本链
在这里插入图片描述

如上图,我们在插入数据的时候,会开启事务,所以会带着一个事务id,接着对这条数据进行修改,MySQL也会将修改的数据加上事务id以及回滚指针(roll_pointer),并且由这个回滚指针来指向上一个事务的旧数据版本,这样就构成了日志版本链。

read-view机制

read-view机制是InnoDB存储引擎实现MVCC的一种来创建一致性读取视图的技术。主要作用是用来确保可重复读和读已提交的隔离级别下,事务能够读到一致的数据快照,即使其他事务在对数据进行修改。
当一个事务想要执行一致性读取操作时候,InnoDB通过多版本并发控制(MVCC)来保存数据的多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个有梦有戏的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值