【MySQL】mvcc以及三个重要日志

🍎个人博客:个人主页

🏆个人专栏:【】数据库

⛳️  功不唐捐,玉汝于成


目录

前言

正文

MVCC关键概念:

MVCC机制的优点:

三个重要的日志:

重做日志:

回滚日志:

事务日志:

结语

 我的其他博客


 

前言

在数据库管理系统中,实现并发控制是至关重要的,特别是在高并发环境下。传统的锁机制在处理并发操作时可能会导致性能瓶颈,因此引入了MVCC(Multi-Version Concurrency Control)机制,为数据库系统带来了新的解决方案。MVCC通过维护多个数据版本和事务视图,实现了读操作与写操作之间的并发性,提高了数据库的性能和并发能力。本文将深入探讨MVCC的原理、实现和优点,帮助读者更好地理解这一关键技术。

正文

MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,主要用于管理数据库系统中多个事务同时读写相同数据时的并发操作。MVCC的核心思想是为每个事务创建一个可见的数据版本,从而允许读取操作与写入操作同时进行而不会相互阻塞。这样可以提高数据库系统的并发性能和效率。

MVCC关键概念:

  1. 数据版本: 在MVCC中,对于每个数据行,数据库系统会维护多个版本。每个事务开始时,系统会将当前数据行的一个快照复制给该事务,以便事务在其执行期间读取数据时看到一致的状态。如果其他事务正在对该数据行进行修改,事务也会看到之前的版本,从而保证了读取操作的一致性和隔离性。

  2. 版本号: 每个数据版本都会有一个唯一的版本号或者时间戳,用于标识该版本的创建时间或者序列顺序。通过比较事务的启动时间或者版本号,数据库系统可以确定哪个版本的数据对当前事务是可见的。

  3. Read-View(读视图): 在执行读取操作时,每个事务会创建一个读视图,用于确定可见的数据版本。读视图包含了事务开始时数据库中所有活跃事务的快照,以及事务自身开始之前已经提交的事务的版本信息。通过读视图,事务可以确定自己能够看到哪些数据版本,从而实现读操作的隔离性。

  4. Write-View(写视图): 在执行写入操作时,事务会创建一个写视图,用于跟踪事务对数据的修改。写视图包含了事务执行期间对数据的更新操作,但并不影响其他事务的读取操作。只有在事务提交时,写视图的修改才会应用到数据库中,从而保证了写操作的原子性和持久性。

MVCC机制的优点:

  • 读操作与写操作之间不会相互阻塞,提高了数据库的并发性能。
  • 提供了事务级别的隔离性,保证了数据的一致性。
  • 可以实现快照读取,避免了读取操作的锁等待。

总的来说,MVCC是一种高效的并发控制机制,通过维护多个数据版本和事务视图来实现对数据的并发访问和修改,从而提高了数据库系统的性能和可靠性。

MVCC主要通过使用多个数据版本来实现,并结合三个重要的日志来确保事务的原子性、一致性和持久性。

三个重要的日志:

  1. 重做日志

    • 作用:记录数据页发生变化的情况,以便在数据库崩溃恢复时重新执行已经提交的事务。
    • 区别:在事务提交之前,重做日志将事务的变更写入日志,而不是立即将其写入磁盘上的数据文件。这样可以避免频繁地更新磁盘数据,提高性能。
  2. 回滚日志

    • 作用:记录事务对数据的修改,在事务回滚或者发生回滚操作时使用。
    • 区别:回滚日志记录了事务执行前的数据状态,以便在事务回滚时撤销已经执行的操作,使得数据库恢复到事务开始之前的状态。
  3. 事务日志

    • 作用:记录了事务的开始和结束信息,用于事务的原子性和持久性。
    • 区别:事务日志用于记录事务的提交或回滚操作,以便在数据库崩溃后,通过重做日志和回滚日志来恢复已提交的事务或者回滚未提交的事务。

这些日志共同作用,确保了数据库事务的 ACID 特性:

  • 原子性(Atomicity):事务要么全部执行,要么全部回滚。
  • 一致性(Consistency):事务执行前后数据库从一个一致状态转换到另一个一致状态。
  • 隔离性(Isolation):事务之间相互隔离,互不干扰。
  • 持久性(Durability):事务一旦提交,其结果就是永久性的。

MVCC机制借助这些日志来实现事务的隔离和持久性。当一个事务正在对某个数据执行修改操作时,其他事务可以读取该数据的旧版本,这样就实现了读写操作的并发性。MVCC同时通过回滚日志和重做日志来确保事务的原子性和持久性,即使在数据库崩溃或断电情况下也能够保证数据的一致性和完整性。

结语

MVCC作为一种高效的并发控制机制,已经被广泛应用于现代数据库系统中。通过创建多个数据版本和事务视图,MVCC实现了读写操作的并发执行,提高了数据库系统的性能和可靠性。深入理解MVCC的原理和实现对于数据库开发人员和系统管理员来说是至关重要的。希望本文能够帮助读者更好地理解MVCC,并在实践中发挥其优势,从而提升数据库系统的效率和性能。

 我的其他博客

【MySQL】数据库规范化的三大法则 — 一探范式设计原则-CSDN博客

【JAVA】线程的run()和start()有什么区别?-CSDN博客

【日常聊聊】程序员必备的面试技巧:如何在面试战场上脱颖而出-CSDN博客

【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁-CSDN博客

【JAVA】怎么确保一个集合不能被修改-CSDN博客

【Web开发】会话管理与无 Cookie 环境下的实现策略-CSDN博客

【Mybatis】Mybatis如何防止sql注入-CSDN博客

【软件工程】航行敏捷之路:深度解析Scrum框架的精髓-CSDN博客

【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客

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

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

相关文章

从金蝶云星空到四化智造MES(API)通过接口配置打通数据

从金蝶云星空到四化智造MES(API)通过接口配置打通数据 数据源平台:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、…

c语言的数据结构:队列

1.队列存在的实现方式及其存在意义 1.1为什么队列使用单链表实现更好 动态内存分配:链表在C语言中通常使用动态内存分配,这意味着可以在运行时根据需要动态地添加或删除节点。这对于实现一个动态大小的队列非常有用,因为队列的大小可以在运…

外链工具,热门的外链工具

在网络推广和搜索引擎优化中,外链工具是提升网站排名和曝光度的关键。本文将介绍一些外链工具,以及它们的作用和用途。 外链工具有哪些? 147SEO工具: 147SEO工具是一款提升网站收录的外链工具,用户可以通过147SEO工具…

antvX6 - Vue自定义节点,并实现多种画布操作,拖拽、缩放、连线、双击、检索等等

一、 首先 antv x6 分为两个版本 低版本和高版本 我这里是使用的2.0版本 并且搭配了相关插件 例如:画布的图形变换、地图等 个人推荐 2.0版本,高版本配置多,可使用相关插件多,但是文档描述小,仍在更新, 低…

JavaWeb之 Web概述

目录 前言1.1 Web和 JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 JavaWeb 学习内容 前言 博主将用 CSDN 记录 Java 后端开发学习之路上的经验,并将自己整理的编程经验和知识分享出来&a…

yolo目标检测实战

该博客主要介绍了: 1. 如何制作yolo目标检测数据集 2.如何在自己的数据集上训练yolo 3.训练好后的模型如何进行推理 1.数据标注 关于数据如何标注,请查看这篇博文 2.数据集目录结构 重点关注红框内部的结构 images: 图片目录 images/train: 训练集…

Zookeeper学习1:概述、安装、应用场景、集群配置

文章目录 概述安装LinuxWindows 配置参数集群参考配置文件配置步骤流程启动 概述 Zookeeper: 为分布式框架组件提供协调服务的中间件 【类似:文件系统通知机制】 负责存储上下层应用关系的数据以及接收观察者注册监听,一旦观察查关心的数据发…

npm与包

包 包的概念 Node.js中的第三方模块又叫做包。包的来源 由第三方个人或团队开发出来的,免费提供给所有人使用。为什么需要包 由于Node.js内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发时,效率很低。包是基于内置模块封装出…

在idea中用模板骨架初始创建maven管理的web项目时没有src有关的目录的解决方案

一.问题如下 二.解决方法 首先关闭当前项目,接着修改全局设置,重新创建项目 在VM Options中添加"-DarchetypeCataloginternal",点击ok保存 点击创建,如果创建成功没报错且有src,就ok了。 当然如果出现以下…

Avalonia学习(二十八)-OpenGL

Avalonia已经继承了opengl,详细的大家可以自己查阅。Avalonia里面启用opengl继承OpenGlControlBase类就可以了。有三个方法。分别是初始化、绘制、释放。 这里把官方源码的例子扒出来给大家看一下。源码在我以前发布的单组件里面。地址在前面的界面总结博文里面。 …

vue cesium加载点与定位到指定位置

vue cesium定位到指定位置 window.viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(point.longDeg, point.latDeg, 6500000), orientation: {heading: 6.2079384332084935, roll: 0.00031509431759868534, pitch: -1.535}, duration: 3})vue cesium加载点 …

[技巧]Arcgis之图斑四至范围批量计算

ArcGIS图层(点、线、面三类图形)四至范围计算 例外一篇介绍:[技巧]Arcgis之图斑四至点批量计算 说明:如下图画出来的框(范围标记不是很准) ,图斑的x最大和x最小,y最大,…