当前位置: 首页 > news >正文

Mysql MVCC

MVCC

什么是MVCC

MVCC(多版本并发控制,Multi-Version Concurrency Control) 是一种用于数据库管理系统(DBMS)中的并发控制机制,它允许多个事务同时执行而不互相阻塞,并通过创建数据的多个版本来确保数据的一致性和隔离性。MVCC 是为了提高数据库并发性而设计的,它通过维护数据的不同版本来解决事务之间的冲突,从而避免了传统锁机制的性能瓶颈。

MVCC的作用

提高并发性:由于每个事务可以操作自己独立的版本,事务之间不会互相阻塞,从而提高了数据库的并发性能。
减少锁竞争:MVCC 通过避免对数据的直接锁定,减少了传统的锁机制引起的竞争和死锁问题。
实现一致性和隔离性:MVCC 保证每个事务读取到的数据都是某个时间点的一致快照,确保事务的隔离性(特别是避免“脏读”和“不可重复读”问题)。
支持高效的读操作:MVCC 使得读操作可以在不阻塞写操作的情况下进行,从而大幅提高了数据库的读性能。

理解MVCC

MVCC主要是在读已提交(RC)和可重复读(RR)中实现

在这里插入图片描述

案例:

可以看看下面的视频,讲得很好
MVCC

下面有4个事务,事务ABC做更新操作,事务D做查询操作
在这里插入图片描述
会出现如下结果:
在这里插入图片描述

原因后面会讲,这里先引入两个概念:

回滚日志和ReadView

回滚日志:

回滚日志是 MVCC 的核心组成部分之一,它记录了数据的所有修改操作,用于实现数据版本的回滚。每当事务对数据进行修改时,系统会生成一个新的数据版本,并将修改操作及其相关信息写入回滚日志。回滚日志保存着事务的修改操作以及原始数据的副本,使得在事务回滚时可以恢复数据到修改之前的状态。
在 MVCC 中,回滚日志不仅帮助管理数据的多版本控制,还使得系统能够在事务完成后保留数据的历史版本。
在这里插入图片描述

ReadView

读视图是 MVCC 中用于实现事务隔离性的关键机制。每当一个事务开始时,它会生成一个 读视图,该视图记录了该事务开始时可见的所有版本数据
快照读:
在这里插入图片描述
当前读:
在这里插入图片描述
ReadView数据结构:
在这里插入图片描述

读已提交(RC)生成的ReadView

这里每次查询都会生成readView,
在这里插入图片描述

这里的判断依据

在这里插入图片描述
因此会在一个事务中的多次查询会出现不同的结果,出现了不可重复读结果

可重复度(RR)的ReadView


RR会用第一个select生成的ReadView 也就是说只生成了一个readView ,所有能解决重复读

能解决幻读吗?

不能,因为MVCC不是使用锁的机制,如果要解决幻读,就必须要让事务顺序执行
下面举例说明
在这里插入图片描述

例子:

这里事务B两个select之间(快照读)中间有次update(当前读)这时候readView就会重新生成
在这里插入图片描述

总结:

读取已提交和可重复读级别利用了ReadView和MVCC,也就是每个事务只能读取它能看到的版本(ReadView)。

READ COMMITTED:每次读取数据前都生成一个 ReadView
REPEATABLE READ:在第一次读取数据时生成一个 ReadView

应用场景

数据库管理系统(DBMS):如 PostgreSQLMySQL(InnoDB)等都采用了MVCC技术来提高并发处理能力。
分布式系统:MVCC 也常用于分布式数据库系统中,以确保跨多个节点的事务一致性。

其他问题

MVCC如何处理事务回滚时的版本清理,以避免版本堆积导致性能问题?

如何设计一个高效的回滚日志系统以保证数据的一致性和系统的高性能?

在分布式环境中,MVCC是如何处理节点间数据一致性的?

相关文章:

Mysql MVCC

MVCC 什么是MVCC MVCC(多版本并发控制,Multi-Version Concurrency Control) 是一种用于数据库管理系统(DBMS)中的并发控制机制,它允许多个事务同时执行而不互相阻塞,并通过创建数据的多个版本…...

Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端

文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理(1)为RestClient(2)为WebClient(3)为RestTemplate 注意 一、概述 官方文档…...

springboot医院信管系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…...

迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写内核 LED HDF 驱动程序

接下来编译 LED 驱动,该驱动用于在基于华为设备框架(HDF)的系统中控制 LED 灯的开关,完整代码如下所示: 更多内容可以关注:迅为RK3568开发板篇OpenHarmony...

[javaWeb]初识Web

将该图片在浏览器中打印出来 代码&#xff1a; <html> <head> <title>HTML初识</title> </head> <body> <h1>猫猫</h1> <img src "img/1.jpg"> </body> &l…...

复健第二天之[MoeCTF 2022]baby_file

打开题目在线环境可以看到&#xff1a; 感觉要用伪协议去求&#xff0c;但是我们并不知道flag的位置&#xff0c;这里我选择用dirsearch去扫一下&#xff1a; 最像的应该就是flag.php了 于是就构建payload&#xff1a; **?filephp://filter/convert.base64-encode/resource…...

uniapp 微信小程序 editor 富文本编辑器

<view class"inp boxsizing"><view class"contentBox"><!-- 富文本编辑器 --><view classwrapper><view classtoolbar tap"format"><view :class"formats.bold ? ql-active : " class"iconfon…...

SparkSQL函数

文章目录 1. SparkSQL函数概述2. SparkSQL内置函数2.1 常用内置函数分类2.2 常用数组函数2.2.1 array()函数1. 定义2. 语法3. 示例 2.3 常用日期与时间戳函数2.4 常见聚合函数2.5 常见窗口函数 3. SparkSQL自定义函数3.1 自定义函数分类3.2 自定义函数案例演示 1. SparkSQL函数…...

从零开始学数据库 day2 DML

从零开始学数据库&#xff1a;DML操作详解 在今天的数字化时代&#xff0c;数据库的使用已经成为了各行各业的必备技能。无论你是想开发一个简单的应用&#xff0c;还是想要管理复杂的数据&#xff0c;掌握数据库的基本操作都是至关重要的。在这篇博客中&#xff0c;我们将专注…...

电脑换固态硬盘

参考&#xff1a; https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种&#xff1a; 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜&#xff1a; M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…...

【大数据】机器学习------支持向量机(SVM)

支持向量机的基本概念和数学公式&#xff1a; 1. 线性可分的支持向量机 对于线性可分的数据集 &#xff0c;其中(x_i \in R^d) 是特征向量 是类别标签&#xff0c;目标是找到一个超平面 &#xff0c;使得对于所有 的样本 &#xff0c;对于所有(y_i -1) 的样本&#xff0c;…...

Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅

引言&#xff1a;音浪太强&#xff0c;我稳如老 HAL&#xff01; 如果有一天你的耳机里传来的不是《咱们屯里人》&#xff0c;而是金属碰撞般的杂音&#xff0c;那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果&#xff01;在 Android 音频架构中&#xff0c…...

Golang Gin系列-2:搭建Gin 框架环境

开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中&#xff0c;我们将引导你完成安装Go编程语言和Gin框架的过程&#xff0c;Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中&#xff0c;本指南是高效而强大的web开发路线图。 安装…...

FGC_grasp复现

复现FGC_grasp 环境配置数据集准备RuntimeError: CUDA error: invalid device ordinal 问题的解决方案raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file问题的解决方案加载数据集时总是被kill然后服务器也卡住了动不了问题的…...

实力认证 | 海云安入选《信创安全产品及服务购买决策参考》

近日&#xff0c;国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》&#xff0c;报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…...

Avalonia系列文章之小试牛刀

最近有朋友反馈&#xff0c;能否分享一下Avalonia相关的文章&#xff0c;于是就抽空学习了一下&#xff0c;发现Avalonia真的是一款非常不错的UI框架&#xff0c;值得花时间认真学习一下&#xff0c;于是边学习边记录&#xff0c;整理成文&#xff0c;分享给大家&#xff0c;希…...

中国数字安全产业年度报告(2024)

数字安全是指&#xff0c;在全球数字化背景下&#xff0c;合理控制个人、组织、国家在各种活动中面临的数字风险&#xff0c;保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…...

LabVIEW桥接传感器配置与数据采集

该LabVIEW程序主要用于配置桥接传感器并进行数据采集&#xff0c;涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI&#xff08;"Auto Cleanup"&#xff09;用于自动清理资源&#xff0c;建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…...

简明docker快速入门并实践方法

简明docker快速入门并实践方法 前言&#xff1a;1. 什么是Docker&#xff1f;2. Docker的基本概念3. 安装配置Docker4. Docker基本命令&#xff1a;5. 简单实践&#xff1a;拉取Nginx镜像-自定义配置-推送镜像步骤 1&#xff1a;拉取Nginx镜像步骤 1.5&#xff08;可选&#xf…...

《MambaIR:一种基于状态空间模型的简单图像修复基线方法》学习笔记

paper&#xff1a;2402.15648 目录 摘要 一、引言 1、模型性能的提升依赖于网络感受野的扩大&#xff1a; 2、全局感受野和高效计算之间存在固有矛盾&#xff1a; 3、改进版 Mamba的巨大潜力 4、Mamba 在图像修复任务中仍面临以下挑战&#xff1a; 5、方法 6、主要贡献…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点

中科院1区顶刊|IF14&#xff1a;多组学MR联合单细胞时空分析&#xff0c;锁定心血管代谢疾病的免疫治疗新靶点 当下&#xff0c;免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入&#xff0c;我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...

使用VMware克隆功能快速搭建集群

自己搭建的虚拟机&#xff0c;后续不管是学习java还是大数据&#xff0c;都需要集群&#xff0c;java需要分布式的微服务&#xff0c;大数据Hadoop的计算集群&#xff0c;如果从头开始搭建虚拟机会比较费时费力&#xff0c;这里分享一下如何使用克隆功能快速搭建一个集群 先把…...