美文网首页
MVCC版本号

MVCC版本号

作者: 金泽祺 | 来源:发表于2019-03-02 16:47 被阅读0次

MVCC版本号到底是什么?

第一种解释:系统版本号

  • InnoDB维护一个自增的系统版本号。每开始一个新的事务,系统版本号会递增。事务开始时的系统版本号作为事务的版本号。
  • INSERT:创建版本号是当时的系统版本号,不是当前事务的版本号。
  • DELETE:删除版本号是当时的系统版本号,不是当前事务的版本号。
  • UPDATE:旧记录的删除版本号是当时的系统版本号,新记录的创建版本号也是当时的系统版本号,不是当前事务的版本号。

第一个SELECT执行的时候,当前事务取到了系统版本号n,系统版本号自增为n+1。此后,其他事务的更新操作能取到的系统版本号最小为n+1,所以当前事务再次SELECT将看不见它们的更新。

但是,当前事务的更新操作怎么可以看到?它的创建/删除版本号难道不也是n+1吗?这里是特殊处理的吗?

第二种解释:事务标识符

添加三个隐藏字段:DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID

字段 说明
DB_ROW_ID 插入新记录的行ID
DB_TRX_ID 事务标识符
DB_ROLL_PTR 指向undo log
  • 第一个SELECT执行时,会创建一个read view,也就是trx_sys的快照,记录了当时活跃的读写事务列表(不包括只读事务)
  • 再次SELECT的时候,通过read view来判断某一行记录是否可以被当前事务看到。如果可以就输出,不可以就利用undo log构建历史版本,再继续判断
  • 先检查DB_TRX_ID标记的事务是否是当前事务,如果是就输出(?)
  • 然后检查事务是否在read view里面,如果在就通过undo log返回到上一个版本,然后继续,直到事务不在read view里才输出

相关文章

  • MVCC版本号

    MVCC版本号到底是什么? 第一种解释:系统版本号 InnoDB维护一个自增的系统版本号。每开始一个新的事务,系统...

  • 如何安全地实现多Key操作?

    etcd v3 为了解决多key的原子操作问题,提供了全新迷你事务API,同时基于MVCC版本号,它可以实现各种隔...

  • MVCC概述

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

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

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

  • MVCC

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

  • 2022-08-15 MVCC

    MVCC多版本并发控制 1、MVCC MVCC,全称Multi-Version Concurrency Contr...

  • 数据库-MVCC

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题...

  • MySQL系列(五)----MySQL MVCC实现机制

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题...

  • MVCC深入理解(转载)

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题...

  • MySQL InnoDB 的多版本并发控制(MVCC)

    innoDB 的多版本并发控制(MVCC) 1. MVCC定义 1.1定义 MVCC全称Mutli Version...

网友评论

      本文标题:MVCC版本号

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