IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql的MVCC是什么 -> 正文阅读

[大数据]Mysql的MVCC是什么

MVCC是什么

MVCC(Multiversion concurrency control)是同一行数据保留多版本的一种方式,进而实现并发控制。
在查询时,通过read view版本链找到对应版本的数据。

MVCC的作用

提升并发性能。对于高并发场景,MVCC比行级锁开销更小

MVCC的实现原理

MVCC的实现依赖于版本链,版本链通过表的三个隐藏字段实现:

  1. DB_TRX_ID:当前事务id(唯一)
  2. DB_ROLL_PRT:回滚指针,指向当前行记录的上一个版本
  3. DB_ROW_ID:主键,如果数据表没有主键,InnoDB会自动生成主键

表的某一行记录示例
在这里插入图片描述

它表示id=1,name=张三,age=19的这条行记录是由事务id=10的事务创建/修改

Read View是什么

read view可以理解为将数据在每个时刻的状态拍成“照片”记录下来。当需要获取时刻t的数据时,就从t时间拍的”照片“上获取数据。
Read View结构:
在这里插入图片描述

Read View如何判断某个版本可以访问

在这里插入图片描述

  1. trx_id == creator_trx_id修改这条行记录的事务如果和创建Read View(也就是查询这条行记录)的事务是同一个事务,那么就可以访问这个版本的行记录数据。
  2. trx_id < min_trx_id:行记录的事务id未提交的最小事务id还要小。说明修改该行记录的事务已经提交。该版本的事务可以被当前事务读取到。
  3. trx_id > max_trx_id:说明当前版本的事务是在生成Read View之后才产生,当前事务无法访问。
  4. min_trx_id <= trx_id <= max_trx_id
    1. 如果在m_ids中存在trx_id,说明是未提交的事务,不可访问
    2. 不存在,说明trx_id已经提交了,可以访问。

例如:
有如下两个事务
在这里插入图片描述
事务id=20的事务将id=1的行记录的name先改成李四,然后改成王五。
事务id=60的事务对其他表进行一些操作。
在这里插入图片描述

此时进行查询select * from users where id = 1,生成的Read View如下图:
在这里插入图片描述 此时未提交的事务有2060,所以m_ids为[20,60]
生成该Read View的是查询语句,所以creator_trx_id=0(一个事务只有对数据库的数据进行修改操作(增,删,改)的时候,才会为事务分配一个唯一事务id,查询操作的事务没有进行对数据进行修改操作,所以trx_id就是默认的0)

将行记录的每个版本的trx_id与时间轴对比,判断此版本是否可以访问
在这里插入图片描述

此时查询能查询到的数据应该是name=“张三”,原因如下表:

nametrx_id == creator_trx_idtrx_id < min_trx_idtrx_id > max_trx_idmin_trx_id <= trx_id <= max_trx_id结果
王五符合,但在m_ids中无法访问
李四同上无法访问
张三符合可以访问
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:08:12  更:2022-03-06 13:09:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:08:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码