mysql mvcc介绍

一、什么是mvcc

MVCC,即Multi-Version Concurrency Control (多版本并发控制)。它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。

二、什么时候会出现并发问题

  • 读-读;(不会),不需任何操作,不会出现并发问题
  • 读-写;(会),mvcc就是为了解决读写的并发事务问题,不加锁,快照读,效率快。
  • 写-写;(会),mvcc无能为力,所有涉及写写的操作都是通过加锁实现。

三、mvcc解决了什么问题

mvc解决了并发’读-写’下的数据不一致问题。针对的是mysql中读已提交和可重复读的隔离级别。

四、mvcc前置知识点

  1. 事务版本号
    事务每次开启前,都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后顺序。
  2. 两个行记录字段
    trx_id:记录操作这条记录的事务id
    roll_pointer:指向回滚段的undolog
  3. undolog
    undolog,回滚日志,记录的是操作的反向操作,例如:每有一条insert语句会生成一条对应的delete语句。
    undolog两个作用:
    事务回滚时,保证事务一致性和原子性;
    mvcc快照读。
  4. 版本链
    多个事务并行操作某一行数据时,不同事务对该行数据的修改会产生多个版本,然后通过回滚指针(roll_pointer),连成一个链表,这个链表就称为版本链。
  5. 快照读和当前读
    快照读:指的是读取的是快照,并不一定是数据库实际数据。所有的普通select读都是快照读。
    当前读:读取的数据库实际数据,也就是最新版本数据。显示加锁读的才是当前读
     select * from order where id > 10 for update;select & from order where id > 10 lock in share mode;
    
  6. Read View
    6.1 Read View 就是我们前面说的快照。在事务里面,出现普通select语句时,就会生成对应的Read View读快照。不通的隔离级别生成的时机不一样:
    • 读已提交(RC):每次select语句出现时都生成一个Read View;
    • 可重复读(RR):第一次select语句出现时才生成一个Read View,后续select语句并不会生成新的Read View。
      6.2 Read View里面的字段
    • m_ids:当前系统中那些活跃(未提交)的读写事务ID, 它数据结构为一个List。
    • min_limit_id:表示在生成ReadView时,当前系统中活跃的读写事务中最小的事务id,即m_ids中的最小值。
    • max_limit_id:表示生成ReadView时,系统中应该分配给下一个事务的id值。
    • creator_trx_id: 创建当前read view的事务ID

五、mvcc实现原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP1.1升级HTTP2.0

HTTP1.1升级HTTP2.0 一,前言介绍 1.为什么要升级http2.0 HTTP2.0相比于HTTP1.x有以下几个优点: 二进制分帧:HTTP2.0将所有传输的信息分割为更小的消息和帧,并采用二进制格式对它们进行编码,这样可以更好地对数据进行…

【Rust】快速教程——模块mod与跨文件

前言 道尊:没有办法,你的法力已经消失,我的法力所剩无几,除非咱们重新修行,在这个世界里取得更多法力之后,或许有办法下降。——《拔魔》 \;\\\;\\\; 目录 前言跨文件mod多文件mod 跨文件mod //my_mod.rs…

单机版-redis(手动部署)

单机版-redis部署 部署模式:单机版-redis部署 Redis版本:redis-4.0.1 部署redis方式:手动部署 解决GCC问题 linux升级gcc版本详细教程_gcc升级-CSDN博客 在完成第三步时已完成配置,后续为操作命令以及注意事项; 在进行操作数…

一文彻底搞懂 JS 闭包

闭包 定义 闭包是指一个引用了另一个函数作用域中变量的函数,由于 JS 中作用域的特性,闭包常用于嵌套函数。 特性 保存性保护性 保存性 保存性是指闭包函数所访问的那些变量不会立即被清除,这是由于 IE6、7 所使用的内存回收机制导致的…

单例模式(饱汉式和饿汉式)

饱汉式 在真正需要使用的时候才进行构建,而不是在一开始就创建。如果要保证线程安全,需要使用一个mutex来保证。 饿汉式 类加载时即创建对象,线程安全优点:执行效率高缺点:类加载时就初始化,浪费内存资源…

【数据结构】——双链表(增删查改)

目录 前言: 一:双链表的定义 ​编辑 二:双向链表的实现 2.1:链表的构造 2.2:创建头节点 2.3:创建节点 2.4:链表的尾插 2.5:链表的打印 2.6:链表的尾删 2.7&a…

不同content-type对应的前端请求参数处理格式

前端请求参数的处理格式会根据不同的Content-Type(内容类型)而有所不同。以下是几种常见的Content-Type及其对应的请求参数处理格式: Content-Type: application/json: 请求参数需要以JSON格式发送,通常在请求体&…

[计算机网络]网络层概述

呼,写了这么久终于重新开始啦! 自己落下了太多东西了.....是时候应该重新拾掇起来了. 关于后面的代码项目,我的想法是vilas.js仍然使用js来进行编写,但是后续其他的项目会开始尝试使用ts来进行书写了. 就算是前端也需要点规范吧..... 0.写在前面 这篇文章要和大家道个歉,首…

2023年中职“网络安全“—Linux系统渗透提权③

2023年中职"网络安全"—Linux系统渗透提权③ Linux系统渗透提权任务环境说明:1. 使用渗透机对服务器信息收集,并将服务器中SSH服务端口号作为flag提交;2. 使用渗透机对服务器信息收集,并将服务器中主机名称作为flag提交…

访问限制符说明面向对象的封装性

1 问题 Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。 private表示私有,只有自己类能访问,属性可以…

​软考-高级-系统架构设计师教程(清华第2版)【第13章 层次式架构设计理论与实践(P466~495)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第13章 层次式架构设计理论与实践(P466~495)-思维导图】 课本里章节里所有蓝色字体的思维导图

C#匿名方法介绍Action、Func、柯里化Currying

在C#中,匿名方法是一种没有名称的方法,可以被用作委托的参数或者赋值给委托类型的变量。匿名方法主要有两种形式:匿名方法和lambda表达式。 一、匿名方法 匿名方法是C# 2.0引入的特性。匿名方法用delegate关键字定义,它可以有参…

Figma 插件学习(一)

一.插件介绍 插件在文件中运行,执行一个或多个用户操作,并允许用户自定义其体验或创建更高效的工作流程。 插件通过专用插件API与Figma的编辑器交互。还可以利用外部Web API。 1.插件API 插件API支持读写功能,允许查看、创建和修改文件的…

傅里叶级数@正弦级数和余弦级数@奇偶延拓和周期延拓

文章目录 abstract正弦级数和余弦级数周期延拓奇偶延拓对延拓函数做区间限制 小结偶延拓方法奇延拓方法 例 abstract 傅里叶级数正弦级数和余弦级数奇偶延拓和周期延拓 正弦级数和余弦级数 奇函数的傅里叶级数是只含有正弦项的正弦级数偶函数的傅里叶级数是只含有余弦项的余…

打破传统束缚,释放服务潜能:本地生活服务商聚合系统引领行业新风向!

本地生活服务商聚合系统是一种集合多平台、多项目的创新型服务系统,它打破了传统服务商系统的一对一限制,为创业者和运营商带来了诸多优势。小多将深入探讨本地生活服务商聚合系统的优势。 随着互联网的快速发展,本地生活服务也迎来了蓬勃的发…

Mongodb命名和文档限制

选用mongodb时,需要了解与mongodb数据大小,命名上的限制。针对这些限制,本文针对这些限制进行翻译整理。 BSON文档 mongodb中的数据记录,按照文档的形式保存。文档保存在一种类似于JSON的BSON结构中。Mongodb对BSON做了一些限制…

RLlib六:实战用户环境

github源码 自定义用户gymnasium环境使用tune搜索不同的learning rate""" Example of a custom gym environment. Run this example for a demo.This example shows the usage of:- a custom environment- Ray Tune for grid search to try different learni…

el-tree 与table表格联动

html部分 <div class"org-left"><el-input v-model"filterText" placeholder"" size"default" /><el-tree ref"treeRef" class"filter-tree" :data"treeData" :props"defaultProp…

linux gdb调试

安装gdb yum install gdb -y 查看dump文件所在路径&#xff1a; 可通过 cat /proc/sys/kernel/core_pattern命令获取dump目录路径 gdb调试&#xff1a; 可执行文件为 xxx&#xff08;例如&#xff1a;main&#xff09;&#xff0c;结合其运行时产生的dump文件进行调试 命令&a…

彻底删除的文件如何恢复?分享正确方法!

“求救&#xff01;我在清理电脑的过程中&#xff0c;把一些比较久远的文件彻底删除了。但是我突然想起好像有些非常重要的数据也一同被删掉了&#xff0c;这可怎么办&#xff1f;有方法恢复彻底删除的文件么&#xff1f;” 在日常使用电脑的过程中&#xff0c;很多用户或许都会…