在 MySQL InnoDB存储引擎下,RC、RR 基于 MVCC 进行并发事务控制, MVCC 是基于“数据版本”对并发事务进行访问

用一个例子来解释一下,下面是一张事务执行流程图:



稍微解释一下:

  1. 事务 Aid=1088 的记录的 name 改为 “张三”,并提交
  2. 事务 Bid=1088 的记录的 name 改为 “张小三”,并提交
  3. 事务 Cid=1088 的记录的 name 改为 “张老三”,并提交
  4. 事务 D 只是去查询 id=1088 的记录

首先模拟一下在 RC 隔离级别下:事务D 第一次读取的数据是 “张三”,第二次读取的就是“张小三”

这里应该很好理解,因为在 RC 隔离级别下,事务D 能读到 commit 的数据,所以就导致了“不可重复读”问题

如果使用 RR 隔离级别,事务D 的两次读取都是 “张三”

RR 隔离级别是基于 MVCC 实现的,MVCC 又依赖 UNDO_LOGUNDO_LOG就是回滚日志,它是一个版本链,它记录了上一次版本的数据变化

eg:事务 B 把“张三”改为了“张小三”,在UNDO_LOG 中的体现如下:



注:最原始的数据,也就是最下面这一条,它的 事务ID回滚指针 都是 null

了解了 UNDO_LOG 之后,现在引入一个新的名词:ReadView(快照读)

快照都就是普通的 sql 查询语句:select ....

有了快照读就有当前读,当前读是指:

Insert、Update、Delete、

Select ... for update

Select ... lock in share mode

ReadView 数据结构



图是从 IT老齐 那儿盗的,稍微解释一下:

m_ids 未提交的事务,不允许读

min_trx_id 就是快要执行完的事务 id

max_trx_id 就是下一个新的事务的 id

creator_trx_id 就是创建这个 ReadView 是哪个事务

RC 原理

RC(读已提交):在每一次执行快照读时生成 ReadView,根据上面的例子



读了两次,生成了两个 ReadView,先看第一个 ReadView,因为在这个 ReadView 生成的时候,事务1 已经 commit 了,所以他不在活跃事务集合里面,所以 m_ids 是 2,3,4

最小活跃事务就是 2 没有异议

预分配事务id 就是 4+1 = 5

当前的 ReadView 是事务 4 创建的,所以 creator_trx_id = 4

第二个 ReadView 也是一样的的逻辑

版本链数据访问规则:

RR 原理

可重复读原理很简单,就是复用 ReadView



eg:在第二次查询的时候,生成的 ReadView 是复用前一次的,所以不会造成 不可重复读

RR 能解决幻读吗?

能,但不完全能。

如果是多次快照读,ReadView会产生复用,没有幻读产生

但是当多次快照读中间存在当前读,ReadView会重新生成,导致产生幻读

MVCC(多版本并发控制)详解的更多相关文章

  1. gcc5.2版本安装详解

    gcc5.2版本安装详解 1.下载gcc-5.2安装包 gcc各版本浏览地址:http://ftp.gnu.org/gnu/gcc/gcc-5.2浏览地址:http://ftp.gnu.org/gnu ...

  2. CentOS 最新版的下载地址 + 版本选择详解

    CentOS 最新版的下载地址 + 版本选择详解 发现越来越多的机关单位.事业单位开始使用 Linux 作为主要服务器,毕竟,Linux的稳定性和高效性是众所周知的,所以我也打算把自己这一块技术加强一 ...

  3. [转帖]rename(Perl语言版本) 详解

    rename(Perl语言版本) 详解 2019-03-19 22:51:23 wayne17 阅读数 464更多 分类专栏: Ubuntu之路   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  4. InnoDB学习(五)之MVCC多版本并发控制

    MVCC多版本并发控制,是一种数据库管理系统并发控制的方法.MVCC多版本并发控制下,数据库中的数据会有多个版本,分别对应不同的事务,从而达到事务之间并发数据的隔离.MVCC最大的优势是读不加锁,读写 ...

  5. mysql的MVCC多版本并发控制机制

    MVCC多版本并发控制机制 全英文名:Multi-Version Concurrency Control MVCC不会通过加锁互斥来保证隔离性,避免频繁的加锁互斥. 而在串行化隔离级别为了保证较高的隔 ...

  6. MVCC多版本并发控制

    MVCC多版本并发控制 爱情小傻蛋关注 82019.09.28 23:23:37字数 4,740阅读 91,421 前提概要 什么是MVCC 什么是当前读和快照读? 当前读,快照读和MVCC的关系 M ...

  7. 【Mysql】深入理解 MVCC 多版本并发控制

    MVCC MVCC(Multi-Version Concurrency Control),即多版本并发控制.是 innodb 实现事务并发与回滚的重要功能.锁机制可以控制并发操作,但是其系统开销较大, ...

  8. MVCC多版本并发控制的理解

    前置知识 当前读与快照读 当前读 什么是当前读:读取的是最新的数据,不会读到老数据. 何时触发:update.insert.delete.select lock in share mode.selec ...

  9. MySQL MVCC(多版本并发控制)

    概述 为了提高并发MySQL加入了多版本并发控制,它把旧版本记录保存在了共享表空间(undolog),当事务提交之后将重做日志写入磁盘(前提innodb_flush_log_at_trx_commit ...

  10. [MySQL] MVCC 多版本并发控制实现的事务

    1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行2.通过保存数据在某个时间点的快照实现的3.典型的有乐观并发控制和悲观并发控制4.innodb的mvcc是每次事务都有递增的版本 ...

随机推荐

  1. 【课程汇总】Hello HarmonyOS系列课程,手把手带你零基础入门

    HarmonyOS是面向未来.面向全场景的新一代智能终端操作系统,为不同设备的智能化.互联与协同提供了统一的语言,给人们带来简洁.流畅.连续.安全可靠的全场景交互体验. 初识HarmonyOS的开发者 ...

  2. WEB 版的报表工具有没有意义?

    这个问题得从两个方面看. 如果这个 web 版的报表工具指的是现在的自助报表,也就是 BI.多维分析,那它是有意义的, 而且各厂商们都已经做的挺好,可以让业务人员通过简单的拖拽进行各种数据分析,生成自 ...

  3. szfpga Lattice高速下载器HW-USBN-2B 常见问题解答

    .产品特点 1). 支持windows7,Windows10 操作系统,两个操作系统非常稳定不断线. 2). 支持JTAG 模式,速度快,最高30Mb/s,调试serdes core,不会像hw-us ...

  4. Vue3开源组件库

    最近收到的很多问题都是关于Vue3组件库的问题 今天就给大家推荐几个基于Vue3重构的开源组件库 目前状态都处于Beta阶段,建议大家抱着学习的心态入场,勿急于用到生产环境 Ant-design-vu ...

  5. (react)获取json数据与传入(antd配合)

    import React from 'react'; import {fetch} from 'whatwg-fetch'; // import {HashRouter as Router,Route ...

  6. 简单的使用Echars制作柱状图

    简单的使用Echars制作柱状图 html如下 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  7. 力扣1113(MySQL)-报告的记录(简单)

    题目: 动作表:Actions 此表没有主键,所以可能会有重复的行. action 字段是 ENUM 类型的,包含:('view', 'like', 'reaction', 'comment', 'r ...

  8. 云服务器ECS共享标准型S6全新发布,行业内最具性价比

    近日,阿里云弹性计算发布全新一代云服务ECS共享标准型S6,性能相对上一代实例提升15%以上,价格相对上一代最高降低42%,是目前国内云计算厂商更能够提供的最具性价比的云服务器产品.一些中小型网站.轻 ...

  9. Serverless 极致弹性解构在线游戏行业痛点

    简介: 本文将通过剖析一个个具体的场景案例,以期望给相关的游戏开发同学带来共鸣,同时也希望能给非游戏行业的同学带来一些启发. 一.前言 1. 游戏客户上云关注点 游戏行业是一个富有创意又竞争激烈的市场 ...

  10. OceanBase首次阐述战略:继续坚持自研开放之路 开源300万行核心代码

    简介: 在数据库OceanBase3.0峰会上,蚂蚁集团自主研发的分布式数据库OceanBase首次从技术.商业和生态三个维度对未来发展战略进行了系统性阐述.同时,OceanBase宣布正式开源,并成 ...