MVCC多版本并发控制

news2025/1/18 9:03:10

目录

1、数据库并发场景

2、当前读和快照读

3、MVCC的隔离级别

4、实现原理

4.1、隐藏字段

​​​​​​​4.2、Undo_log(版本链)

4.3、Read View(读视图)

4.4、RC、RR隔离级别下的快照读有什么区别


        MVCC,多版本并发控制(维持一个数据的多个版本,使得读写操作没有冲突),用来解决读-写冲突无锁并发控制,(读指的是快照读)。为每一个数据行的修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据行的快照。

1、数据库并发场景

读-读:不存在任何问题,不需要并发控制;

读-写:线程安全问题,可能造成脏读、幻读、不可重复读;

写-写:线程安全问题,可能造成更新丢失。

MVCC+悲观锁/乐观锁:MVCC解决读写冲突,悲观锁/乐观锁解决写写冲突;

2、当前读和快照读

        当前读:读取记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。示例:select lock in share mode、update、insert、delete

        快照读:不加锁的select就是快照读,隔离级别为串行级别时,快照读会退化成当前读。快照读的实现是MVCC,在很多情况下,避免了加锁操作;MVCC基于多版本,快照读的数据就可能是最新数据,也可能是历史数据。

​​​​​​​3、MVCC的隔离级别

  • MVCC手段只适用于Msyql隔离级别中的读已提交RC(Read committed)和可重复读RR(Repeatable Read);
  • Read uncimmitted由于存在脏读,即能读到未提交事务的数据行,所以不适用MVCC.

        原因是MVCC的创建版本和删除版本只要在事务提交后才会产生。

  • 串行化由于是会对所涉及到的表加锁,并非行锁,自然也就不存在行的版本控制问题。

4、实现原理

4.1、隐藏字段

        DB_TRX_ID:最后一次修改该行记录的事务ID

        DB_ROLL_PTR:回滚指针,指向当前记录行的上一个版本的指针;

        DB_ROW_ID:隐藏主键,随着新行插入而单调递增的行ID。

​​​​​​​4.2、Undo_log(版本链)

        分为insert undo log(insert记录时产生的日志)和update undo log(修改或删除时产生的日志);

        不同事务或同一个事务对同一行记录的多次修改,会导致该记录的undo log中存在该记录的多个版本,从而形成一个链表,被称为该行记录的版本链。

 ​​​​​​​4.3、Read View(读视图)

        在事务进行快照读的时候,根据可见性算法,对相关记录行生成读视图,判断当前事务能够获取该行记录的哪个版本数据。

 4.4、RC、RR隔离级别下的快照读有什么区别

以上内容为个人学习理解,如有问题,欢迎在评论区指出。

部分内容截取自网络,如有侵权,联系作者删除。

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

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

相关文章

文献认证!Kamiya艾美捷抗酒石酸酸性磷酸酶TRAP染色试剂盒

人类及动物体骨组织不断地进行着重建,骨重建过程包括骨的分解吸收与新骨的形成。破骨细胞(Osteoclast,OC)负责骨分解与吸收,而成骨细胞(osteoblast,OB)负责新骨形成。破骨细胞贴附在…

【WAX链游】发布一个免费开源的MiningNetwork合约脚本BTK

前言 挖矿网络(Mining Network)官网: https://miningnetwork.io 挖矿网络(Mining Network)合约脚本:https://github.com/encoderlee/MiningNetworkBot 回顾之前我们推出过的免费开源链游脚本&#xff1a…

【React技术】JSX在企业级项目的运用and一个元素渲染demo

JSX 它被称为JSX,是JavaScript的语法扩展。我们建议在React中使用JSX。JSX可以很好地描述UI应该呈现它应该具有的基本交互形式。JSX可能会让人想起模板语言,但它具有JavaScript的所有功能。 const element = <h1>Hello, world!</h1>;React认为渲染逻辑与其他UI…

红眼睛红外成像微型成像仪快速刷新与动态显示温度测量

默认参数下&#xff0c;设备的温度测量和数据输出频率为每秒 4Hz&#xff0c;这一输出速率基本可以保证所有计 算机和手机都能够正常显示实时画面&#xff0c;但导致的问题是实时画面有卡顿的感觉。数据的处理速度与 计算机和手机的配置高低有直接关系&#xff0c;下面仅以…

VScode 基础使用教程

VScode 的安装以及使用基础&#xff08;C配置&#xff09; 奉上VScode安装物资 VScode 的安装 进入VScode官网&#xff0c;点击 Download for windows 即可得到安装包&#xff0c;运行即可。 编译器G的配置 下载 MinGW&#xff0c;将其保存至任意磁盘中&#xff08;下面默认C…

在 Navicat 中执行数据库范围搜索

无论你选择的数据库是 MySQL、MariaDB、SQL Server、Oracle 和 PostgreSQL&#xff0c;还是基于云的服务&#xff0c;如 Amazon RDS、Amazon Aurora、Amazon Redshift、SQL Azure、Oracle Cloud 和 Google Cloud&#xff0c;你都将不可避免地要寻找一些你不知道位置的数据。在这…

简单3步轻松搭建个人博客

对于计算机专业的学生&#xff0c;课余时间最有价值的事莫过于写技术博客了。我们可以通过博客记录生活经历、学习过程、技术成长&#xff0c;同时博客还能树立个人品牌&#xff0c;结识更多兴趣相投的人。 从计算机技术角度而言&#xff0c;博客的搭建及维护会让你的技术不断…

猴子也能学会的jQuery——总结习题

&#x1f4da;系列文章—目录&#x1f525; 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引用jQuery 猴子也能学会的jQuery第三期——使用jQuery 猴子也能学会的jQuery第四期——jQuery选择器大全 猴子也能学会的jQuery第五期——jQuery样式操作…

字符串压缩(三)之短字符串压缩

一、通用算法的短字符压缩 开门见山&#xff0c;我们使用一段比较短的文本&#xff1a;Narrator: It is raining today. So, Peppa and George cannot play outside.Peppa: Daddy, its stopped raining. 使用ZSTD与LZ4分别压缩一下上面这段短文本。下面分别是它们的压缩结果。…

良好基本面引领发展,中国春来将聚势而强?

2022年&#xff0c;是一个挑战与机遇共存的年份。 一方面&#xff0c;作为“双减”、《民促法实施条例》落地执行的第一年&#xff0c;转型难题困扰着广大K12教培企业。另一方面&#xff0c;职业教育、教育信息化利好政策频出&#xff0c;不少从业者藉此打开局面、柳暗花明。 …

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

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

项目经理和产品经理正在用哪些管理工具?

项目管理包括定义项目目标&#xff0c;指定行程和安排任务&#xff0c;以达到特定的目标。在项目管理过程中&#xff0c;很多工具可以使项目管理更有效、更高效。&#xff08;项目管理资料文末&#xff09; 跟大家介绍一下项目经理常用的项目管理工具&#xff1a; 1、甘特图 …

[附源码]计算机毕业设计springboot动物保护协会网站

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

Seata中的AT事务模式是如何实现行锁

Seata中的AT事务模式里面的全局锁是行锁,这也是AT事务模式和XA事务模式在锁粒度上的最大区别。我们可以在官网中可以看到这样一个例子: 两个全局事务 tx1 和 tx2,分别对 a 表的 m 字段进行更新操作,m 的初始值 1000。tx1先开始,开启本地事务,拿到本地锁,更新操作 m = 10…

2022安洵杯web题复现

前言 个人觉得赛题质量蛮好的&#xff0c;只是自己太菜了&#xff0c;花了很长时间都在琢磨第一道web&#xff0c;因为一些细节上的问题导致一直解不出来。赛后就找师傅的wp重新去复现一下&#xff0c;总结自己的问题&#xff0c;在此记录一下&#xff0c;以便日后复习。 bad…

[附源码]计算机毕业设计springboot财务管理系统

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

WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)

王者壁纸自动化获取逻辑分析 其实它的逻辑很简单&#xff0c; 就是王者的官网&#xff0c;打开后&#xff0c;在右下角就看到了皮肤页面部分。 这个时候&#xff0c;点击更多&#xff0c;就会打开全部英雄详情的页面。 这个时候&#xff0c;单点任意一个英雄&#xff0c;就会…

怎么从零开始搭建配置Windows云服务器的新手入门教程

本文是搭建 Windows 云服务器入门教程&#xff0c;主要介绍如何从零开始&#xff0c;以最简单的方式搭建和配置你的Windows 云服务器。如果您之前没有搭建云服务器的经验&#xff0c;建议您按照本文介绍的方式来购买和配置您的第一台云服务器。 1、步骤1&#xff1a;注册腾讯云…

文件上传漏洞笔记

漏洞成因 文件上传漏洞正是在文件上传功能中&#xff0c;由于对用户上传的文件数据未做有效检测或过滤不严&#xff0c;导致上传的恶意文件被服务端解释器解析执行&#xff0c;利用漏洞可获取系统控制权。 很多网站都有一些文件上传功能&#xff0c;常见的是图片、视频、压缩文…

多线程 _ 基础篇 _ 线程安全问题【JavaEE初阶】

一、线程安全概述 1.1 什么是线程安全问题 线程安全问题 出现的 "罪魁祸首"&#xff0c;正是 调度器的 随机调度 / 抢占式执行 这个过程 在随机调度之下&#xff0c;多线程程序执行的时候&#xff0c; 有无数种可能的排列方式 在这些排列顺序中&#xff0c;有的…