mysql数据库 mvcc

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: mysql数据库 mvcc

在看MVCC之前我们先补充些基础内容,首先来看下事务的ACID和数据的总体运行流程

数据库整体的使用流程:

ACID流程图

mysql核心日志:

在MySQL数据库中有三个非常重要的日志binlog,undolog,redolog.

mvcc概念介绍:

MVCC(Multi-Version Concurrency Control):多版本并发控制,是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。 MVCC 在 MySQL InnoDB 中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。

当前读和快照读的概念:

当前读(Current Read)指的是读取数据当前最新数据。这种读取方式需要保证其他并发事务不能修改当前记录,因此会对读取的记录进行加锁。在执行当前读操作时,用户可以访问数据库中最新的数据状态,包括最近提交的事务所做的修改。这种读取方式具有实时数据可见性,因为它读取的是已提交的最新数据。加锁的SELECT操作,或者对数据进行增删改都会进行当前读。

快照读(Snapshot Read)则是指在读取数据时,生成读取快照,并在同一个事务中可能会一直读取此快照的数据。快照读读到的数据可能不是最新的,而是历史版本的数据。这些历史版本的数据可以从undo log中获取。在事务中的SELECT不加锁的情况下,会执行快照读。快照读依赖readview来实现。需要注意的是,快照读的前提是隔离级别不是串行级别,因为在串行级别下的快照读会退化成当前读。

总的来说,当前读和快照读的主要区别在于它们读取数据的方式和时间点。当前读总是读取最新的已提交数据,而快照读则可能读取历史版本的数据。这两种读取方式在数据库操作中各有其应用场景和优势。

他们相互之间的联系:

  1. MVCC与快照读
  • 快照读是MVCC的一个实现方式。当执行快照读时,数据库会提供一个数据的一致性快照,而不是当前最新的数据。这个快照是基于某个时间点的数据版本,可能不是最新的。
  • 由于快照读是基于多版本的,因此它不需要对读取的数据加锁,从而实现了非阻塞的读取操作。
  • 在MySQL的InnoDB存储引擎中,快照读是通过read view机制来实现的。read view记录了某个时间点的系统活跃事务列表,并根据这个列表来判断哪些数据版本对当前事务是可见的。
  1. MVCC与当前读
  • 当前读是读取数据的最新版本,并且在读取时会加锁,以确保其他并发事务不能修改当前记录。
  • 在MVCC的上下文中,当前读会读取最新的数据版本,这个版本是与当前事务ID相关联的。
  • 当前读通常发生在执行SELECT ... FOR UPDATEUPDATEDELETE等操作时,这些操作需要确保读取的数据在事务处理期间不会被其他事务修改。

代码实例:

1.创建表

CREATE TABLE example (  
    id INT PRIMARY KEY,  
    value INT  
);  
  
INSERT INTO example (id, value) VALUES (1, 100);  
INSERT INTO example (id, value) VALUES (2, 200);

事务A(当前读):

START TRANSACTION;  
SELECT * FROM example WHERE id = 1 FOR UPDATE; -- 当前读,会加锁

事务B(快照读):

START TRANSACTION;  
SELECT * FROM example WHERE id = 1; -- 快照读,不会加锁,读取的是事务开始时的数据版本

事务A修改数据:

UPDATE example SET value = 150 WHERE id = 1; -- 事务A修改数据

事务B修改数据:

START TRANSACTION;  
SELECT * FROM example WHERE id = 1 FOR UPDATE; -- 事务B的当前读

 

好了 本篇文章就到这里 在这里我向大家推荐一个性价比很高课程:

https://xxetb.xetslk.com/s/2PjJ3T

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL
|
2月前
|
Oracle 关系型数据库 MySQL
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
51 0
|
2月前
|
存储 缓存 关系型数据库
⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制
⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制
130 0
|
13天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
5天前
|
关系型数据库 MySQL
mysql事务隔离级别MVCC
mysql事务隔离级别MVCC
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MVCC
多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。 MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView。在 RC、RR 这两种隔离级别下生效。 在事务也提到,MVCC是保证MySQL在默认隔离级别RR情况下,针对快照读解决幻读问题。而针对当前读需要隔离锁的临键锁(记录锁+间隙锁)去解决。
131 0
|
2月前
|
存储 SQL 关系型数据库
MySQL事务底层原理和MVCC机制
MySQL事务底层原理和MVCC机制
47 1
|
2月前
|
SQL 关系型数据库 MySQL
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
124 1
|
11月前
|
算法 关系型数据库 MySQL
MySQL事务隔离实现原理,多版本并发控制MVCC
MySQL事务隔离实现原理,多版本并发控制MVCC
145 0
|
2月前
|
存储 SQL 关系型数据库
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
256 0