Mysql事务隔离级别和MCVV(多版本并发控制)附图 ✨ 每日积累

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql事务隔离级别和MCVV(多版本并发控制)附图 ✨ 每日积累

于《高性能MYSQL》一书中可以到得知


事务隔离级别


1、READ UNCOMMITED(读未提交):在这个级别中,即使没有提交,对其他事物也是可见的,事务可以读取未提交的数据,这也称之为脏读。这个会造成很多问题,从性能来说,并不比其他的隔离级别好太多,但是缺乏其他隔离级而别的好处,除非整的有非常必要的,实际应用中很少见。


2、READ COMMITED(读已提交):大多数数据库系用默认得隔离级别是这个(mysql不是),一个事务在开始时,只能看到已经提交得事务所做的修改,意思是:一个事务从开始到commit提交之前,所做的任何修改都是对其他事务不可见,即前后两次读取到的结果不一样。


3、REPEATABLE READ(可重复读:MYSQL默认的事务隔离级别):这个隔离级别解决了脏读和在同一个事务中多次读取得结果不一致。但是可重复读无法解决幻读得问题,幻读指当前事务在读取某个范围内得记录时,另外的一个事务对该范围内插入了数据,当当前事务再次读取到记录时,发现记录比之前得行数要多也就是(幻行)。mysql得InnoDB和XtraDB存储引擎通过MVCC(多版本并发控制)解决了幻读的问题。


4、SERIALIZABLE(可串行化:MYSQL最高隔离级别):通过事务得强制串行化执行,避免了幻读得问题,这个隔离级别会对读取得每一行数据加锁,可能导致大量的超时和锁征用得问题。实际上很少用这个隔离级别,只有在非常需要确保数据一致性的情况且没有并发的情况下才考虑使用这种方式。


这四种隔离级别中只有可串行话是加锁读,其他都是无锁读。


MVCC

MVCC是多版本并发控制,,mysql大多数事务型存储引擎实现的都不是简单的行级锁,为了提升并发性能得考虑,实现了MVCC,不仅是mysql,oracle和postgreSQL也是先了MVCC,的但是各自实现得机制不一样,因为没有一个标准。
MVCC是行级锁得一个变种,在一些情况下避免了加锁操作,因此开销很低,各种数据库大都是实现了非阻塞大的读操作,写操作也只是锁定必要的行。
MVCC得实现,是通过保存数据在某个时间点的快照来实现得。也就是说,不管需要执行多长时间,每个事务看到的数据都是一致的。根据事务的开始时间不同,每个事务对同一张表,同一时刻看到的数据可能不一样得。
InnoDB得MVCC,是通过每行记录后面保存两个隐藏函数得列来实现大的。这两个列,一个化是保存了行得创建时间,一个是保存行得过期时间(或者删除时间)。存储的并不是实际的时间值,而是一个系统的版本号。每开始一个新的事务,系统版本号会自动递增。

1.png

参考样图

在MySQL中建表时,每个表都会有三列隐藏字段,其中和MVCC有关系的有两个字段:数据行的系统版本号 (DB_TRX_ID)和删除版本标识(DB_ROLL_PT)

1.png

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19小时前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之mysql cdc支持全量的时候并发读取,该如何配置
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8天前
|
SQL 存储 缓存
【MySQL】事务
【MySQL】事务
16 0
|
8天前
|
存储 关系型数据库 MySQL
MySQL事务简述
MySQL事务简述
8 0
|
8天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
29 2
|
8天前
|
存储 算法 关系型数据库
MySQL事务与锁,看这一篇就够了!
MySQL事务与锁,看这一篇就够了!
|
8天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
14 0
|
1天前
|
存储 数据可视化 关系型数据库
【MySQL进阶之路 | 基础篇】创建和管理数据库
【MySQL进阶之路 | 基础篇】创建和管理数据库
|
1天前
|
存储 SQL 关系型数据库
【MySQL】数据库基础 -- 详解
【MySQL】数据库基础 -- 详解
|
1天前
|
关系型数据库 MySQL 数据库
如何在MySQL中查看已创建的数据库列表?
【5月更文挑战第22天】如何在MySQL中查看已创建的数据库列表?
5 1
|
3天前
|
存储 关系型数据库 MySQL
MySQL中数据库的相关操作
MySQL中数据库的相关操作
224 62