MySQL之MVCC

news2024/9/22 1:33:28

多版本并发控制MVCC,也就是Copy on Write思想。MVCC除了支持读和读并行,还支持读和写并行、写和读并行,但为了保持数据一致性,写和写是无法并行的。

​ 如下图,在事务1写的时候会copy一个记录的副本,其他事务的读操作会读取这个记录的副本,因此不影响其他事务对此记录的写入,实现写和读并行。

在这里插入图片描述

  • MVCC 概念

    ​ MVCC(Multi Version Concurrency Control)被称为多版本并发控制,是指在数据库中为了实现高并发的数据访问,对数据进行多版本处理,并通过事务的可见性来保证事务能看到自己应该看到的数据版本。多版本并发控制很巧妙的将稀缺资源的独占互斥转变为并发,大大提高了数据库的吞吐量和读写性能。

    ​ 如何生成多版本?每次事务修改操作前,都会在Undo日志中记录修改之前的数据状态和事务号,该备份记录可以用于其他事务的读取,也可以进行必要时的数据回滚。

  • MVCC实现原理

    ​ MVCC最大的好处是读不加锁,读写不冲突,极大的提升系统的并发性能。目前MVCC只在Read Commited和Repeatable Read下工作。

    ​ 在MVCC并发控制中,读操作可以分为两类:快照读(Snapshot Read)和当前读(Current Read):

    • 快照读:读取的是记录的快照版本(有可能是历史版本),不用加锁(select);

    • 当前读:读取的是记录的最新版本,并且当前读返回的记录都会加锁,保证其他事务不会再并发修改这条记录。(select ··· for update 或 lock in share mode, insert/delete/update)

      MVCC已经解决了读读、读写、写读并发,如果想进一步解决写写冲突,可采用下面两种方案:

      • 乐观锁
      • 悲观锁

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

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

相关文章

编译器做了这么多,你知道吗?

编译器做了什么 从最直观的角度来讲,编译器就是将高级语言翻译成机器语言的一个工具。比如我们用C/C语言写的一个程序可以使用编译器将其翻译成机器可以执行的指令及数据。我们前面也提到了,使用机器指令或汇编语言编写程序是十分费事及乏味的事情&…

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料 ​IT6000D系列大功率可编程直流电源可支持多种规格的输出能力,以满足高电流、低电压或高电压、低电流等多种测试需求。同时,相同型号的整机间可并联工作,以实现更强大的输出能力…

settings.py配置文件(详解)

文章目录settings.py配置文件1. settings.py文件介绍1) BASE_DIR2) SECRET_KEY3) DEBUG4) ALLOWED_HOSTS5) INSTALLED_APPS6) MIDDLEWARE7) ROOT_URLCONF8) TEMPLATES9) WSGI_APPLICATION10) DATABASES11) AUTH_PASSWORD_VALIDATORS12) LANGUAGE_CODE和TIME_ZONE13) USE_118N和…

Cy7 Tyramide,Tyramide-Cy7,花青素Cy7 酪酰胺,Cy7酪胺

●外观以及性质: Cy7酪胺含有明亮的Cy7,可以使用标准的Cy7滤波片组轻松检测到。酪胺信号放大(TSA)是一种特别通用且功能强大的酶扩增技术,具有更高的检测灵敏度。西安凯新生物科技有限公司​为了实现大IHC检测&#xf…

排序算法总结

排序算法 排序算法可以分为内部排序和外部排序 内部排序是数据记录在内存中进行排序 外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并…

Qt-OpenCV学习笔记--人脸识别

前言 本人从事机械设计12年,业余时间自学编程。 2022年4月6日,开始学习C#, 2022年9月7日,开始学习c和Qt, 2022年10月28日,开始学习OpenCV, 今天终于搞定了传说中的 人脸识别 ,在…

spirngcloud的基本介绍与服务注册

1. 应用系统架构的演变 单应用架构 -> 应用服务器和数据库服务器分离 -> 应用服务器集群 -> 数据库压力变大,数据库读写分离 -> 引入缓存机制缓解数据库的压力 -> 数据库的水平/垂直拆分(数据库分库分表) -> 应用的拆分(微服务&…

[附源码]计算机毕业设计绿色生活交流社区网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

GitLab搭建

以docker方式运行gitlab docker run --detach \--hostname gitlab.mczaiyun.top \--publish 8443:443 --publish 8090:80 --publish 8022:22 \--name gitlab \--restart always \--volume /root/gitlab/config:/etc/gitlab \--volume /root/gitlab/logs:/var/log/gitlab \--vo…

Elasticsearch入门(二)基本操作(索引、文档、映射)

数据格式 Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比ES 里的 Index 可以看做一个库,而 Types 相当于表&#x…

【在Vue脚手架项目中使用qs框架】

目录 1. 安装qs框架 2. 在main.js中添加配置 1. 安装qs框架 在前端项目中,可以使用qs框架,实现“将对象转换为FormData格式的数据”。 首先,安装此框架: 如果没有权限进入C盘找到cmd的执行软件,用管理员启动&…

练习题(12-06)

目录 1.最小数 2.数天数 3.非常特殊的数 4.最大值路径 5.拆分质数 6.文件拷贝 7.除去重复单词 8.变成回文字符串 1.最小数 题目描述 请找到一个大于2022的最小数,这个最小的数转换成二进制后,最低的6个二进制全为0. 思路:枚举即…

[附源码]Python计算机毕业设计Django物业管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Java开发:反射机制

一、Java Reflection Reflection(反射)是java被视为动态语言的关键(Java是静态语言,因为有了反射所以又被成为“准动态语言”) 二、重点:一个类只有一个Class对象 三、反射的优缺点 优点:可…

【JAVA问题解决方案】02.Freemarker导出Excel超出上限分表解决方案

陈老老老板🦸👨‍💻本文专栏:Java问题解决方案(都是一些常见的问题解决方案)👨‍💻本文简述:本文讲一下有关Freemarker导出Excel分表的解决方案,超级详细。&a…

Tomcat7+ 弱口令 后台getshell漏洞

Tomcat7 弱口令 && 后台getshell漏洞 🍉 shell 此环境来自vulhub工程: https://github.com/vulhub/vulhub 以下测试环境为ubuntu 20.04 🍉目录Tomcat7 弱口令 && 后台getshell漏洞环境准备弱密码登录war文件上传蚁剑连接…

SoftEther linux与windows使用

1、SoftEther简介 我们来先科普一下什么是SoftEther吧,SoftEther是由日本筑波大学的登大遊在硕士论文中提出的开源、跨平台、多重协议的虚拟专用网方案,其实我更看重的是他的内网穿透功能,下面来一张图片,说明它的强大。 SoftEther正确定的安…

【力扣】剑指offer第二天

剑指offer第二天[剑指 Offer 06. 从尾到头打印链表 - 力扣(LeetCode)]方法一代码方法二代码[剑指 Offer 24. 反转链表 - 力扣(LeetCode)]方法一代码方法二代码[剑指 Offer 35. 复杂链表的复制 - 力扣(LeetCode&#xf…

日期功能组件(加上左右点击,更改月份)

要求效果&#xff1a; &#xff0c;直接可以显示年月&#xff0c;并且点击左右箭头可以更改月份 点击这个日期&#xff0c;可以选择。 最后实现效果&#xff1a; 实现&#xff1a; 先找一个插件&#xff0c;可以选择时间 <!-- 选择年月--><div class"form-…

SAP ARFCSTATE ARFCSDATA TRFCQOUT

SELECT count(1) FROM arfcsstate --18848155 20221122 清理前 -- 6582457 清理后 SELECT count(1) FROM ARFCSDATA a -- 81732430 202221122 清理前 -- 25064628 清理后 SELECT count(1) FROM TRFCQOUT t --18848095 202221122 …