• MySQL:已提交读和可重复读的实现原理 | MVCC(多版本并发控制)——笔记自用


    文章目录

    MVCC

    MVCC是多版本并发控制(Multi-Version Concurrency Control,简称MVCC),是MySQL中基于乐观锁理论实现隔离级别的方式,用于实现已提交读和可重复读隔离级别的实现,也经常称为多版本数据库。MVCC机制会生成一个数据请求时间点的一致性数据快照 (Snapshot), 并用这个快照来提供一定级别 (语句级或事务级) 的一致性读取。从用户的角度来看,好象是数据库可以提供同一数据的多个版本(系统版本号和事务版本号)。

    MVCC多版本并发控制中,读操作可以分为两类:
    1、快照读(snapshot read)
    读的是记录的可见版本,不用加锁
    。如select

    2、当前读(current read)
    读取的是记录的最新版本,并且当前读返回的记录
    。如insert,delete,update,select…lock in sharemode/for update

    MVCC:每一行记录实际上有多个版本,每个版本的记录除了数据本身之外,增加了其它字段
    DB_TRX_ID:记录当前事务ID
    DB_ROLL_PTR:指向undo log日志上数据的指针

    已提交读:每次执行语句的时候都重新生成一次快照(Read View),每次select查询时。
    可重复读:同一个事务开始的时候生成一个当前事务全局性的快照(Read View),第一次select查询时。

    快照内容读取原则:
    1、版本未提交无法读取生成快照
    2、版本已提交,但是在快照创建后提交的,无法读取
    3、版本已提交,但是在快照创建前提交的,可以读取
    4、当前事务内自己的更新,可以读到

    在这里插入图片描述

    在这里插入图片描述

    undo log

    undo log:回滚日志,保存了事务发生之前的数据的一个版本,用于事务执行时的回滚操作,同时也是实现多版本并发控制(MVCC)下读操作的关键技术。

    DB_TRX_ID:事务ID
    DB_ROLL_PTR:回滚指针

    图示:在该图中,第一个事务id是1000,它利用(DB_ROLL_PTR)保存了上一个事务操作的地址

    在这里插入图片描述

  • 相关阅读:
    消息队列的持久化、分发策略、高可用和高可靠
    小柏实战学习Liunx(图文教程二十二)
    【Linux篇】磁盘lvm管理(PV,VG,LV,PE)
    Acwing算法心得——猜测短跑队员的速度(重写比较器)
    Linux:基础开发工具之Makefile和缓冲区的基本概念
    基于信道状态信息的Wi-Fi感知技术与实践
    编程之美1 哈利波特买书问题
    RabbitMQ 的快速使用
    多线程基础部分Part2
    第1章 初识视图文件(*.vue)
  • 原文地址:https://blog.csdn.net/m0_56257585/article/details/126224918