MySQL数据库多版本并发控制(MVCC)

      在数据库中,并发控制是确保多个事务能够同时执行,而不会导致数据不一致或冲突的关键机制。多版本并发控制(MVCC)是一种流行的并发控制方法,它可以允许多个事务同时读取同一数据项的不同版本,而不会相互阻塞。本文将讨论MVCC的原理、实现、优势以及举例说明。

       MVCC通过维护数据项的不同版本,使得事务可以看到一个一致性的数据。当一个事务修改数据时,MVCC会创建一个新版本的数据,其他事务仍然可以看到旧版本的数据,直到该事务提交或者回滚。这样方式可以大大减少事务之间的锁等待和冲突,从而提高系统的并发性能,后续我们也将讨论MySQL数据库的并发性能。

        MVCC具有以下优势:

1.高并发,减少了事务之间的锁等待和冲突,允许多个事务同时访问数据;

2.非阻塞读操作:读操作不会阻塞写操作,写操作同样不会阻塞读操作;

3.更好的隔离性:通过维护多个数据版本,确保每个事务都能看到一个一致性的数据。

        在MySQL默认的隔离级别(Repeatable Read)下,MVCC是如何控制数据版本的,下面举例进行说明:

当开启事务后,进行全表更新时,在INNODB_TRX表中就是有事务版本信息

查看INFORMATION_SECHEMA.INNODB_TRX表,可以看到有一个事务版本信息

关键字段的含义分别是:

如果在当前表被锁住的情况,另外一个事务想要修改其中的某项数据,那么就会产生一个等待锁的事务:

trx_state、trx_started、trx_mysql_thread分别描述了事务的状态、事务的开始时间、事务是由哪个线性产生的。

MySQL使用了一个叫做“版本链”的机制,每个行都有一个隐藏的“版本”列,用来跟踪数据的版本,当数据被更新时,新的版本会被创建,而旧版本会被保留。

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

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

相关文章

在 iPhone 手机上恢复数据的 7 个有效应用程序

我们的生活离不开 iPhone。无论我们走到哪里,他们都陪伴着我们,让我们保持联系、拍摄照片和视频,并提供娱乐。与此同时,您将计算机安全地放在办公桌上,不受天气影响,也不受伤害。如果您要在任何地方丢失重要…

Redis实现滚动周榜|滚动榜单|直播间榜单|排行榜|Redis实现日榜04

上述文章主要探讨了实现滚动榜单的两种方式。第一种方式是同步写n天滚动榜单,但这种方式存在一个严重的缺点:每天都需要编写多个榜单。尽管在实现三天或七天滚动榜单时相对简单,但若要实现近30天的滚动榜单,这种方式显得不够智能。…

API集群负载统计 (100%用例)C卷 (JavaPythonNode.jsC语言C++)

某个产品的RESTful API集合部署在服务器集群的多个节点上, 近期对客户端访问日志进行了采集,需要统计各个API的访问频次, 根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。 RESTful API的由多个层级构成,层级之间使用/连接,如/A/B/C/D这个地址…

【ES】Elasticsearch常见问题与解决(持续更新)

目录 Elasticsearch常见问题 1. 集群健康问题 2. 性能问题 3. 映射问题 4. 分片问题 5. 内存问题 6. 硬件问题 7. 配置问题 8. 安全问题 9. 网络问题 10. 版本不兼容 Elasticsearch日常使用小结 【Q】离线告警,有IP已离线 【Q】统计某个应用的某个索引…

Spring Boot笔记2

3. SpringBoot原理分析 3.1. 起步依赖原理解析 3.1.1. 分析spring-boot-starter-parent 按住Ctrl键,然后点击pom.xml中的spring-boot-starter-parent,跳转到了spring-boot-starter-parent的pom.xml,xml配置如下(只摘抄了部分重…

Mybatis Java API - SqlSession

正如前面提到的,​SqlSession​实例是MyBatis中最重要、最强大的类。它是您将找到执行语句、提交或回滚事务以及获取映射器实例的所有方法的地方。 SqlSession 类上有超过二十个方法,让我们将它们分成更易理解的组别。 Statement Execution Methods-语…

Android 13 - Media框架(28)- MediaCodec(三)

上一节我们了解到 ACodec 执行完 start 流程后,会把所有的 input buffer 都提交给 MediaCodec 层,MediaCodec 是如何处理传上来的 buffer 呢?这一节我们就来了解一下这部分内容。 1、ACodecBufferChannel::fillThisBuffer ACodec 通过调用 A…

Java 代理模式

一、代理模式概述 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 代理模式的主要作用是扩展目标…

C++ 383. 赎金信 (a b字符串计数比较)

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&…

7天玩转 Golang 标准库之 flag

在编写Golang命令行应用时,flag标准库无疑是一个很有价值的工具。它允许你以各种方式来定义和解析命令行参数。 基础示例:定义与解析参数 若想使用flag标准库,你必须首先定义你希望从命令行接收的参数。下面展示了几种常见的参数类型&#x…

Linux中proc文件系统相关介绍

proc虚拟文件系统的工作原理 linux 内核是一个非常庞大、非常复杂的一个单独的程序,对于这样一个程序来说调试是非常复杂的。像kernel这样庞大的项目,给里面添加或者修改一个功能是非常麻烦的,因为添加一个功能可能会影响其他已经有的功能。…

3D动态路障生成

3D动态路障生成 介绍设计实现1.路面创建2.空物体的创建3.Create.cs脚本创建 总结 介绍 上一篇文章介绍了Mathf.Lerp的底层实现原理,这里介绍一下跑酷类游戏的动态路障生成是如何实现的。 动态路障其实比较好生成,但是难点在哪里,如果都是平面…

6. C++的引用与指针

摘要:本文首先介绍 C 的内存模型和变量周期作为知识背景,接着对C中的引用和指针(原始指针和智能指针)进行介绍。 1. 对象生命周期 什么是对象生命周期?简单来说,对象生命周期指的是:对象从创建…

JMeter逻辑控制器之While控制器

JMeter逻辑控制器之While控制器 1. 背景2.目的3. 介绍4.While示例4.1 添加While控制器4.2 While控制器面板4.3 While控制器添加请求4.3 While控制器应用场景 1. 背景 存在一些使用场景,比如:某个请求必须等待上一个请求正确响应后才能开始执行。或者&…

Idea如何从磁盘中应用 下载好的插件流程,安装zip压缩包。

1、将下载的插件文件(通常是一个ZIP文件)复制到IntelliJ IDEA的“plugins”文件夹中。 IDEA版本 2、重启IntelliJ IDEA。 3、在设置窗口中,选择左侧的“Plugins”。 4、选择之前复制到“plugins”文件夹中的插件文件,点击“OK”按…

基于Wenet长音频分割降噪识别

Wenet是一个流行的语音处理工具,它专注于长音频的处理,具备分割、降噪和识别功能。它的长音频分割降噪识别功能允许对长时间录制的音频进行分段处理,首先对音频进行分割,将其分解成更小的段落或语音片段。接着进行降噪处理&#x…

springboot学习(八十五) 解决springboot3.2找不到资源无法抛出404错误的问题

前言 springboot3.2以下可以定义ErrorPageRegistrar将404错误转发到一个接口地址,但升级到springboot3.2(spring6.1)后,该配置不生效,抛出了500错误。 以前的错误页面处理如下: ConditionalOnClass(ErrorPageRegist…

深入理解二分查找算法(一)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#) Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在NEOAPI SDK里通过函数获取相机帧率 Baume…

Android Studio新手实战——深入学习Activity组件

目录 前言 一、Activity简介 二、任务栈相关概念 三、常用Flag 四、结束当前Activity 五、Intent跳转Activity 六、更多资源 前言 Android是目前全球最流行的移动操作系统之一,而Activity作为Android应用程序的四大组件之一,是Android应用程序的核…