mysql数据库 mvcc

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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
相关文章
|
6月前
|
关系型数据库 MySQL
|
6月前
|
Oracle 关系型数据库 MySQL
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
MySQL相关(六)- 事务隔离级别的实现方案(MVCC)
78 0
|
20天前
|
存储 关系型数据库 MySQL
MySQL MVCC全面解读:掌握并发控制的核心机制
【10月更文挑战第15天】 在数据库管理系统中,MySQL的InnoDB存储引擎采用了一种称为MVCC(Multi-Version Concurrency Control,多版本并发控制)的技术来处理事务的并发访问。MVCC不仅提高了数据库的并发性能,还保证了事务的隔离性。本文将深入探讨MySQL中的MVCC机制,为你在面试中遇到的相关问题提供全面的解答。
56 2
|
20天前
|
存储 关系型数据库 MySQL
MySQL MVCC深度解析:掌握并发控制的艺术
【10月更文挑战第23天】 在数据库领域,MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种重要的并发控制机制,它允许多个事务并发执行而不产生冲突。MySQL作为广泛使用的数据库系统,其InnoDB存储引擎就采用了MVCC来处理事务。本文将深入探讨MySQL中的MVCC机制,帮助你在面试中自信应对相关问题。
59 3
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
2月前
|
关系型数据库 MySQL 数据库
MySQL高级篇——MVCC多版本并发控制
什么是MVCC、快照读与当前读、隐藏字段、Undo Log版本链、ReadView、举例说明、InnoDB 解决幻读问题
MySQL高级篇——MVCC多版本并发控制
|
3月前
|
SQL 关系型数据库 MySQL
Mysql原理与调优-事务与MVCC
【8月更文挑战第19天】
|
4月前
|
SQL 存储 关系型数据库
(九)MySQL之MVCC机制:为什么你改了的数据我还看不见?
在《MySQL锁机制》这篇文章中,咱们全面剖析了MySQL提供的锁机制,对于并发事务通常可以通过其提供的各类锁,去确保各场景下的线程安全问题,从而能够防止脏写、脏读、不可重复读及幻读这类问题出现。
111 0
|
3月前
|
关系型数据库 MySQL 数据库
MySQL MVCC和间隙锁有什么区别?
【8月更文挑战第24天】MySQL MVCC和间隙锁有什么区别?
88 0
|
4月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
47 2