Mvcc--mysql详解(十一)

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

上篇文章说了为了解决mysql原子性,于是undo日志来记录需要回滚的数据,首先回滚不需要考虑select,每行数据都有roll_pointer指针,指向insert undo日志,updatedeleteinsert是不同的,多一个old_roll_pointer指向需要回滚的日志,update分为主键更新和非主键更新,减少不必要的重排序性能消耗。

Undo日志--mysql详解(十)


Mvcc


全称是multi-version concurrency control,多版本并发控制。


当我们并发执行会发生什么问题呢?

脏读:当一个事务读取了另一个事务里未提交的数据,甚至在另一个事务发生了回滚,这个数据并不存在。


不可重复读:在一个事务里,每次读取都是其他事务最新值,而导致在每次查询的值每次都不一致。


幻读:在一个事务里,每次查询的记录数不一样,有的时候多,有的时候少,针对于新增和删除。(一个事务先查询一些数据,另一个事务又向表里插入新数据,这时候在第一个事务查询的值增多)


四种隔离级别:

Read uncommit:存在以上三个问题。

Read commit:解决脏读。

Repeatable read:解决不可重复读,每次select都是不同的数据,被其他事务所修改。

Serializable:串行化,各种问题都不会发生,效率低。


隔离级别可以通过set transaction isolation level serializable,查看可以用show

Variables like transaction_isolation;

对于serializable隔离级别的事务,采用的是加锁方式解决的,对于read uncommitcommit

Repeatable read级别采用的是readView

M_ids:表示系统中活跃的读写事务id列表。

Min_trx_id:表示活跃中的最小事务id。(m_ids里最小值)

max_trx_id:表示应该分配给下一个事务的id。(不在m_ids里)

Creator_trx_id:表示生成该readView的事务id


他的过程就是当前事务会与这些字段来判断:

当当前事务小于最小事务id的时候,代表已经被提交,可以被访问。


当当前事务大于最大事务id的时候,表示事务在之后才开启,不可以被访问。


如果在之间,则判断是都在m_ids活跃列表里,在的话不可以访问,不在则可以访问。


Read commitrepeatable不同的是,readview生成时机不同,前者是每次select都会生成readView,后者只有第一次select会生成,后面重复使用。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MVCC
多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。 MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView。在 RC、RR 这两种隔离级别下生效。 在事务也提到,MVCC是保证MySQL在默认隔离级别RR情况下,针对快照读解决幻读问题。而针对当前读需要隔离锁的临键锁(记录锁+间隙锁)去解决。
198 0
|
6月前
|
存储 SQL 关系型数据库
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
482 0
|
SQL 存储 关系型数据库
【MySQL进阶-05】深入理解mvcc机制(详解)
【MySQL进阶-05】深入理解mvcc机制(详解)
813 0
|
SQL 存储 关系型数据库
MySQL中 LBCC 和 MVCC 的理解,常见问题及示例:
MySQL中 LBCC 和 MVCC 的理解,常见问题及示例:
407 1
MySQL中 LBCC 和 MVCC 的理解,常见问题及示例:
|
SQL 存储 安全
MySQL 8.0 MVCC 源码解析
本文在此基础上,对 MVCC 展开详细的分析,同时修改了之前的一些不太准确的说法,希望可以助你在面试中更好的发(zhuang)挥(bi)。
619 0
MySQL 8.0 MVCC 源码解析
|
搜索推荐 关系型数据库 MySQL
Mysql锁--mysql详解(十二)
Mysql锁--mysql详解(十二)
|
关系型数据库 MySQL
MySQL的MVCC底层原理二(下)
MySQL的MVCC底层原理二(下)
120 0
MySQL的MVCC底层原理二(下)
|
关系型数据库 MySQL
MySQL的MVCC底层原理二(中)
MySQL的MVCC底层原理二(中)
118 0
MySQL的MVCC底层原理二(中)
|
关系型数据库 MySQL
MySQL的MVCC底层原理(上)
MySQL的MVCC底层原理(上)
140 0
MySQL的MVCC底层原理(上)
|
关系型数据库 MySQL 数据库
MySQL的MVCC底层原理(下)
MySQL的MVCC底层原理(下)
106 0
MySQL的MVCC底层原理(下)