首页 > 其他分享 >什么是 MVCC

什么是 MVCC

时间:2023-12-05 16:46:06浏览次数:35  
标签:事务 什么 数据库 并发 版本 MVCC ID

又双叒叕被面试官问倒了...

MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,主要用于处理多个事务同时访问和修改数据库时的并发问题:

  • 定义: MVCC 允许数据库在事务并发执行时维护不同版本的数据,而不是简单地锁定数据。每个事务在执行时看到的数据版本基于事务开始的时间戳。

  • 多版本: 每次对数据库的修改都会创建一个新版本,这通过为每个事务分配唯一的时间戳实现。因此,不同事务可能同时存在相同数据的多个版本。

  • 读一致性: MVCC 提供了读取一致性,即一个事务在开始后只能看到在其开始时间之前提交的修改。这通过在读取时使用适当的版本来实现。

  • 并发处理: MVCC 减少了锁定和阻塞,允许事务并发执行而不会相互干扰,提高了数据库的性能和吞吐量。

MySQL 8 如何实现 MVCC

在 MySQL 8 中,MVCC 是由存储引擎来实现的,而不是 MySQL 服务器本身。MySQL 8 的默认存储引擎是 InnoDB,它使用 MVCC 来处理并发事务。

实现细节:

  1. 事务ID(Transaction ID):

    • 每个事务在开始时会被分配一个唯一的事务ID。
    • 这个事务ID用于标识事务的开始和结束时间。
  2. 每行记录的版本号:

    • 每行记录都包含两个隐藏的列,即DB_ROW_IDDB_TRX_ID
    • DB_ROW_ID是每行记录的版本号。
    • DB_TRX_ID是对应事务的事务ID。
    • 每行记录可以有多个版本,每个版本对应于修改该行的不同事务。
  3. Read View(读视图):

    • 在每个事务开始时,都会创建一个Read View。
    • Read View包含事务开始时数据库中所有活动事务的快照。
    • Read View确保事务只能看到在其开始时间之前提交的修改。
  4. Undo Log(撤销日志):

    • InnoDB使用撤销日志来存储事务的旧版本数据。
    • 撤销日志用于在事务回滚或MVCC读取时提供旧版本的数据。
  5. Purge(清理):

    • 后台进程负责清理已经提交的事务产生的旧版本数据。
    • 清理过程确保系统中不会累积大量未使用的数据。

个人理解

未完待补充

标签:事务,什么,数据库,并发,版本,MVCC,ID
From: https://www.cnblogs.com/lweiis/p/17877601.html

相关文章

  • 安防监控RTSP视频平台EasyNVR不显示通道、无法创建角色是什么原因?
    安防视频监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能提供视频实时监控、录像、回放、云存储、告警、平台级联等功能,平台还具备设备管理、用户管理、权限管理、流媒体接入与转发管理等,可对外分发多格式的视频流,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。为了便于......
  • maxWait: 600000是什么意思
    maxWait:600000是指在使用连接池管理数据库连接时,最大等待时间的设置。连接池是一种用于管理和复用数据库连接的技术,它可以提高应用程序对数据库的性能和并发处理能力。当应用程序需要获取一个数据库连接时,如果连接池中的连接已经全部被占用,那么应用程序就需要等待其他连接释放后......
  • process.nextTick是什么?
    process.nextTick是Node.js中一个特殊的函数,用于在当前操作结束后(当前事件循环的末尾)立即执行回调函数。它比setImmediate的优先级更高,并且会在下一个微任务队列中执行,而不是下一个事件循环迭代中。使用process.nextTick可以将回调函数安排在当前操作的末尾,以确保它在事件......
  • 2023年广东工业大学腾讯杯新生程序设计竞赛不知道叫什么名字(前缀和)
    需要的是男生女生数量相同,做个转化,女生变成-1,然后求一遍前缀和,我们希望找到最长的满足\(sum(l,r)=0\)的区间也就是\(sum(r)-s(l-1)=0\)考虑枚举右端点,找到最左端和它相等的sum就是对于当前右端点的最长的。最开始想了个二分答案的假做法,011100,这里答案是6,长度为4不满足......
  • setImmediate是什么,和setTimeout有何区别?
    setImmediate是一个用于在Node.js中执行异步操作的函数。它类似于setTimeout,但是会在当前事件循环的末尾立即执行回调函数,而不是等待一定的延迟时间。使用setImmediate可以将回调函数放置在当前事件循环的队列末尾,以确保它在下一个事件循环开始时尽快执行,而不会阻塞其他任......
  • Fetch和XHR有什么区别?
    区别:原生APIvsES6新增函数:XHR是浏览器提供的原生API,而fetch是ES6中新增的全局函数。使用对象差异:XHR使用XMLHttpRequest对象,而fetch使用Promise对象。Cookies默认携带:fetch默认不会携带cookies,需要手动设置credentials属性;而XHR请求会自动携带cook......
  • ES 什么是elasticsearch
    ES是elasticsearch的简称,elasticsearch是一款非常强大的开源分布式搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。elasticsearch的底层实现是一个名为Lucene的技术。而Lucene中的核心技术就是倒排索引Lucene的优势:易扩展、高性能(基于倒排索引)Lucene的缺点:......
  • 什么是倒排索引
    前言上周四被面试官问到了倒排索引,虽用过ES,但不知道这玩意儿说不过去啊。倒排索引(InvertedIndex)是一种用于快速查找文档或文档集合中包含特定词汇的数据结构。与传统的正排索引(ForwardIndex)不同,倒排索引是通过词汇表(词汇-文档关系表)来构建的。在倒排索引中,每个词汇都会映射......
  • “影响力”经济:抖音为什么更值得商家、达人长期深耕?
    文|新熔财经作者|叶一城数亿的活跃用户,简单而自然的切入方式,快速、高频的执行效率,让抖音对电商界的冲击无可阻挡。这背后,流量玩法登峰造极,是很多人的直接观感。但实际上,更底层、更本质,是“影响力”经济正在发挥作用。电商是抖音“影响力”经济的表现之一,而不是流量的产物。这种属性,决......
  • 为什么上个系统就这么难
     为什么说上个系统好很有难度呢?它的难度又在哪里呢?下面是笔者摸索出了一套模型进行分享,大家一起往下看看了解更多。 为什么上个系统就这么难© 由ZAKER科技提供看这标题,经历过的同学都挺深有感触的吧。确实是上个系统就是这么难,是真得不容易!做了这么多系统,我自......