每日一博 - 浅析事务隔离级别& MVCC机制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 每日一博 - 浅析事务隔离级别& MVCC机制

d0fdb2e70e1847b2b9749789048967d3.png


DB四个隔离级别


数据库隔离允许事务执行,就像没有其他并发运行的事务一样。

下面的图说明了四个隔离级别。


Serializalble: 这是最高的隔离级别。并发交易保证按顺序执行。

Repeatable Read: 事务开始时读取的数据保持不变。

Read Committed: 只有事务提交后,数据修改才能被其他事务读取。

Read Uncommitted: 数据修改可以在事务提交前被其他事务读取。


MVCC如何工作的 ?


隔离性是通过MVCC(多版本一致性控制)和锁来保证的。

下图以Repeatable Read为例,演示MVCC如何工作:


每行有两个隐藏列:transaction_id和roll_pointer。


当事务A开始时,创建一个新的读视图,transaction_id=201。


一会儿过后事务B开始后,创建一个新的读视图,transaction_id=202。


现在,事务A将余额修改为200,创建日志的新行,并且roll_pointer指向旧行。


在事务A提交之前,事务B读取余额数据。事务B发现transaction_id 201尚未提交,它读取下一个已提交的记录(transaction_id=200)。


即使事务A提交,事务B仍然基于事务B开始时创建的读视图读取数据。所以事务B总是读取余额=100的数据。


MVCC通过为每行记录创建多个版本,并且为每个事务生成一个时间点快照(Read View),实现非阻塞读和隔离性。 这种机制允许并发事务同时读取数据,而不会堵塞其他事务


0dcce394d38d4a86a658bf989a507b0d.png



小结


MySQL 的 MVCC(多版本并发控制)机制主要包含以下几个方面:


行版本(Version):MySQL 为每行记录维护多个版本,每个版本都有唯一的版本号(Version Number)。


事务ID(Trx ID):每个事务开始时,会分配一个唯一的事务ID,用于标识事务在时间轴上的位置。


快照(Snapshot):当事务开始时,MySQL 会为其创建一个快照,快照中包含此时数据页中所有版本和对应事务ID。事务执行期间,所有读请求都在此快照中查找版本。


时间轴位置判断:事务需要判断其他版本的事务ID是否早于自己,以判断其是否可见。如果早于自己,说明其已提交,自己可见;否则,不可见。


行版本生成:事务更新数据时,会生成行的新版本,并把新版本的事务ID设置为自己的ID。其他事务只有在此事务提交后,新版本才对其可见。


事务回滚:如果事务回滚,其生成的所有新行版本都会被移除,不会对其他事务产生影响。


MVCC自更新问题:事务A读取一行,事务B也读取并修改了此行,此时事务A再修改此行。为避免覆盖,事务A生成新版本,并阻塞事务B的修改,等待其提交或回滚。


通过版本判断和控制,MVCC可以实现不同隔离级别下的并发控制:


  • Repeatable Read:利用快照实现
  • Read Committed:通过时间轴判断可见版本实现
  • Read Uncommitted:所有版本都可见


所以,MySQL MVCC 通过行版本和时间轴判断来控制并发事务间的隔离和一致性,这是MySQL并发控制的基石。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 关系型数据库 数据库
聊多版本并发控制(MVCC)
MVCC是数据库并发控制技术,用于减少读写冲突。它维护数据的多个版本,使事务能读旧数据而写新数据,无需锁定记录。当前读获取最新版本,加锁防止修改;快照读不加锁,根据读取时的读视图(readview)决定读哪个版本。InnoDB通过隐藏字段(DB_TRX_ID, DB_ROLL_PTR)和undo log存储版本,readview记录活跃事务ID。读已提交每次读取都创建新视图,可重复读则在整个事务中复用一个视图,确保一致性。MVCC通过undo log版本链和readview规则决定事务可见性,实现了非阻塞并发读。
292 5
聊多版本并发控制(MVCC)
|
存储 关系型数据库 MySQL
MVCC多版本并发控制
MVCC多版本并发控制 1、MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
96 0
|
数据库
谈谈你对MVCC的理解
MVCC也是一道非常高频的面试题,今天我花两分钟时间给大家梳理一下。另外,我花了1个多星期把往期的面试题解析配套文档准备好了,想获取的小伙伴可以在我的煮叶简介中找到。
102 0
|
26天前
MVCC 与其他并发控制机制的区别
【10月更文挑战第15天】总之,MVCC 与其他并发控制机制各有特点和适用场景。在实际应用中,需要根据具体的业务需求和系统特点选择合适的并发控制机制,以实现最佳的性能和数据一致性。
|
1月前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
259 4
|
6月前
|
存储 关系型数据库 MySQL
MVCC:深入解析多版本并发控制机制
【4月更文挑战第20天】MVCC是数据库并发控制的关键技术,通过保存数据多个版本,使读写操作无锁并发,减少锁竞争,提高并发性能。它保证事务看到一致数据快照,避免并发问题,并支持事务回滚与恢复。MVCC广泛应用于PostgreSQL、InnoDB等,提供时间旅行查询和无锁读等功能,对于构建高性能、高并发数据库系统至关重要。
148 13
|
6月前
|
SQL 关系型数据库 MySQL
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
161 1
|
SQL 存储 缓存
【ACID底层实现原理、一致性非锁定读(MVCC的原理)、BufferPool缓存机制、重做日志刷盘策略、隔离级别】
【ACID底层实现原理、一致性非锁定读(MVCC的原理)、BufferPool缓存机制、重做日志刷盘策略、隔离级别】
51522 1
【ACID底层实现原理、一致性非锁定读(MVCC的原理)、BufferPool缓存机制、重做日志刷盘策略、隔离级别】
|
存储 关系型数据库 MySQL
【MySQL】MVCC多版本并发控制(重点:MVCC实现原理之ReadView)
本文重点介绍MySQL的MVCC概念、快照读与当前读、MVCC实现原理之ReadView、隐藏字段、Undo Log版本链。
355 0
|
SQL 存储 算法
InnoDB事务隔离实现原理
### 前言 大部分服务端系统都是数据密集型应用,主要的功能是基于数据库对各种业务数据进行增删查改。在互联网这种高并发场景,如何确保数据的准确性以及保证系统的吞吐量,事务的隔离性有很大一部分功劳,本文主要探究MySQL数据库InnoD存储引擎的事务隔离级别及其背后实现原理,并且会回答以下问题: 1. 不同事务隔离级别解决的问题,如何解决的? 2. MVCC和数据库锁之间的相同和不同之处是什么?
185 0