美文网首页
对mvcc的理解

对mvcc的理解

作者: zcxzcxczcx | 来源:发表于2021-04-07 15:25 被阅读0次

1、mysql事务特性

原子性、一致性、持久性、隔离性

2、事务隔离的级别

因为事务隔离会出现脏读、不可重复读、换读的问题,为了解决这些问题,事务的隔离有四个级别:读未提交、读提交、可重复读、串行化。其中的读提交和可重复读级别背后的实现用到的就是mvcc。

3、mvcc

mvcc(Mutil-Version Concurrency Control),多版本并发控制指的是 “维持一个数据的多个版本,使得读写操作没有冲突” 。

4、mvcc实现原理

mvcc的实现主要有三部分构成:记录的隐式字段、undolog、视图。

a、记录的隐式字段

DB_TRX_ID:记录创建这条记录/最后一次修改该记录的事务ID

DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本

DB_ROW_ID:隐含的自增ID(隐藏主键),如果数据表没有主键,InnoDB会自动以DB_ROW_ID产生一个聚簇索引

实际还有一个删除flag隐藏字段, 既记录被更新或删除并不代表真的删除,而是删除flag变了

b、undolog

c 、视图

事务在进行快照读的时候产生的快照图,即视图。在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的ID。我们可以把Read View简单的理解成有三个全局属性:

trx_list:一个数值列表,用来维护Read View生成时刻系统正活跃的事务ID

up_limit_id:记录trx_list列表中事务ID最小的ID

low_limit_id:ReadView生成时刻系统尚未分配的下一个事务ID,也就是目前已出现过的事务ID的最大值+1

Read View遵循的可见性算法

比如事务1生成视图,取到视图中的DB_TRX_ID,如果DB_TRX_ID小于up_limit_id,则该视图对于事务1可见(注:事务1处于trx_list中)。如果大于low_limit_id,则该视图对于事务1不可见。如果在trx_list区间,但是在trx_list找得到,则说明事务DB_TRX_ID还没有提交,该视图对于事务1不可见。如果在trx_list区间,但是在trx_list找不到,则该视图对于事务1可见。

d、当前读、快照读的定义

当前读:就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁

快照读:不加锁的非阻塞读

e、RR是如何在RC级的基础上解决不可重复读的?

在RC隔离级别下,是每个快照读都会生成并获取最新的Read View;而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。

相关文章

  • 对mvcc的理解

    1、mysql事务特性 原子性、一致性、持久性、隔离性 2、事务隔离的级别 因为事务隔离会出现脏读、不可重复读、换...

  • mysql innodb中对MVCC的理解

    一、MVCC简介 MVCC (Multiversion Concurrency Control),即多版本并发控制...

  • 对于MVCC的理解

    MVCC,全称Multi-Version Concurrency Control,即多版本并发控制,为多个版本的数...

  • 深入理解MVCC

    1. MVCC的基本概念 1.1 三种数据库并发场景 读-读:不存在任何问题,也不需要并发控制 读-写:有线程安全...

  • MYSQL-innoDB-MVCC

    多版本并发控制(MVCC) MVCC可以理解成为行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。...

  • MVCC概述

    MVCC概述 MVCC简介 MVCC (Multiversion Concurrency Control),即多版...

  • 第一周作业-职业规划

    1.什么是MVCC?有什么作用? 多版本并发控制,在理解MVCC前,先了解一下锁的概念,当有两个或多个用户读写数据...

  • 【MySQL】MVCC详解与MVCC实现原理

    一、什么是MVCC MVCC,全称 Multi-Version Concurrency Control ,MVCC...

  • 读已提交(RC)与可重复读(RR)不可重复读测试步骤

    InnoDB引擎的RC与RR隔离级别都支持基于MVCC的事务并发控制,MVCC是基于“数据版本”对并发事务访问,这...

  • MVCC

    1、MVCC简介 1.1 什么是MVCC MVCC(全称Multi-Version Concurrent Cont...

网友评论

      本文标题:对mvcc的理解

      本文链接:https://www.haomeiwen.com/subject/ubxfiktx.html