面试之MySQL中的mvcc

这篇具有很好参考价值的文章主要介绍了面试之MySQL中的mvcc。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

面试之MySQL中的mvcc,面试,职场和发展

 首先需要知道什么是 MVCC?

MVCC 多版本并发控制。MVCC就是通过数据行的多个版本管理来实现数据库的并发控制。这项技术是的InnoDB的事务隔离级别下执行一致性读 有了保证。换言之,就是为了查询一些正在被一个事务更新的行。并且可以看到他们被更新之前的值。查询在做查询的时候就不用等待 另一个事务释放锁。

MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式就是 读-写 冲突,做到即使有多写冲突时。也能做到 不加锁,非阻塞并发读,而这个读指的就是 快照读,当前读实际时一种加锁的操作,是悲观锁的实现。而MVCC本质是采用悲观锁思想的一种方式。

面试之MySQL中的mvcc,面试,职场和发展

对应InnoDB来说,聚簇索引中的每个记录都包含了两个必要的隐藏字段:

    trx_id:每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的事务id赋值给trx_id隐藏列。
    roll_pointer:回滚指针,每次修改数据时,都会把旧数据放入undo log日志中,新的数据指向该旧数据,做成一个版本链,该指针字段就称为回滚指针,通过该指针可以找到修改前的数据。
面试之MySQL中的mvcc,面试,职场和发展

四、Read View(读视图)

有了undo log日志就可以读取记录的历史版本。但是如何去欸的那个具体的版本记录?就需要用Read View记录,他解决了行的可见性问题。

RC(读已提交) 和 RR(可重复读)必须要保证读的数据 都是其他事务已经提交的数据。所以,其他事务修改数据,但是还未提交,我们不可以访问此数据。但是可以通过MVCC可以访问 对应的历史版本。核心问题:判断版本链中的那条数据 对于当前事务是 可见的。这也是 ReadView 需要解决的问题。

ReadView 就是当某一个使用MVCC机制使用快照读而形成的视图。该试图是当前所有 活跃事务id

组成一个列表的快照。(记录版本链的统计信息)

面试之MySQL中的mvcc,面试,职场和发展

    m_trx_ids:表示在生成Read View时当前系统中活跃的事务id列表。提交了的事务不在其中。
    min_trx__id:活跃的事务中最小的事务id。指的版本链的末尾
    max_trx_id:表示生成Read View时系统应该分配给下一个事务的id值,同样也表示系统中最大的事务id值。

  creator_trx_id:示生成该ReadView的事务的事务id

具体ReadView的匹配规则用下来描述

面试之MySQL中的mvcc,面试,职场和发展

解释图片中的具体数:

图片中的活跃事务(活跃事务= 读未提交的事务)有 90,100,200。

则对应的 trx_ids  = (90,100,200)

min_trx_id =90,就是最小的事务号,也就是m_ids中的最小值,则版本链的队尾数据。

max_trx_id = 201. 是因为它为系统分配下一个事务的id。当前事务id=200.下一个就是201.并不是trx_ids中的最大值。最大值+1.

creator_trx_id:由于ReadView 是由当前事务创建,当前事务=201,所以 creatoe_trx_id = 201.

接下来就是 具体的匹配兜底规则:

需要理解的是:当前事务是201,我们需要判断的是判断链条中的那些数据可以访问。(就是用 200,100,90)分别进行匹配兜底判断。

1.如果被访问版本的trx_id 等于 ReadView中的creator_trx_id ,就是说明当前事务 正在访问被他自己修改的记录,因此是可以访问的。

2.如果被访问版本的trx_id 小于 ReadView中的 min_trx_id,就是说明该版本的事务 在 生成ReadView之前就已经提交,因此可以访问的。

3.如果被访问版本的trx_id 小于 ReadView中的 max_trx_id,就是说明该版本的事务 在 生成ReadView之后才开启,因此是不可以访问。

4.如果被访问版本的trx_id属性值在ReadViewmin_trx_idmax_trx_id之间,那就需要判断一下trx_id属性值是不是在m_ids列表中,如果在,说明创建ReadView时生成该版本的事务还是活跃的,该版本不可以被访问;如果不在,说明创建ReadView时生成该版本的事务已经被提交,该版本可以被访问。

面试之MySQL中的mvcc,面试,职场和发展

 

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



 文章来源地址https://www.toymoban.com/news/detail-570193.html

到了这里,关于面试之MySQL中的mvcc的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何手机搜学法减分答案? #媒体#职场发展

    今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.证件照全能管家(APP) 一个非常好用的证件照APP 常用的证件照尺寸和底色都有、日常的证件照编辑完全够用,支持一键智能拍摄证件照,还可以对照片

    2024年02月19日
    浏览(47)
  • 【职业人生】如何有效的在职场当中避免工作失误和提高个人发展

         《左传·宣公二年》:“人谁无过,过而能改,善莫大焉。”古往今来,多少人犯过错误。强大如“智绝”的诸葛孔明,也有街亭之失。职场人更是难免会在工作中出现失误。     在职场生涯当中避免不了在工作当中带来的失误,在这过程当中,我们应当要学会怎么去

    2024年02月08日
    浏览(42)
  • [office] excel成绩表格数据排名次的教程 #职场发展#知识分享#媒体

    excel成绩表格数据排名次的教程 Excel 中经常需要使用到 排名 次的技巧,成绩表格数据具体该如何排名呢?接下来是小编为大家带来的excel成绩表格数据排名次的教程,供大家参考。 步骤1:不管在学校还是各个统计领域,排名应用随处可见,如果排序会打乱原有次序,那么好多

    2024年02月21日
    浏览(39)
  • 突破职场竞争,引领未来发展:考取《研发效能(DevOps)工程师职业技术认证》

    就业形势堪忧,什么最有保障?考个“国家级”证书傍身吧! 工信部教考中心作为中国领先的行业技能认证机构,其颁发的认证证书不仅代表了个人在信息技术领域的专业能力,更可以录入工业和信息化技术技能人才数据库,这是一个重要的信息资源平台,它可以帮助企业和

    2024年02月05日
    浏览(44)
  • [office] Excel中函数进行计算两个日期参数差值的方法 #职场发展#学习方法#媒体

    Excel中函数进行计算两个日期参数差值的方法 在excel使用中,如果想计算两个日期参数的差值,该用什么函数和如何使用呢?今天,小编就教大家在Excel中函数进行计算两个日期参数差值的方法。 Excel中函数进行计算两个日期参数差值的步骤 在excel中计算两个日期参数的差值,

    2024年02月20日
    浏览(46)
  • 【MySQL】MVCC详解与MVCC实现原理(MySQL专栏启动)

    📫作者简介: 小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的

    2023年04月09日
    浏览(36)
  • java八股文面试[数据库]——可重复读怎么实现的(MVCC)

    可重复读(repeatable read)定义: 一个事务执行过程中看到的数据,总是 跟这个事务 在 启动时 看到的数据是一致的。 MVCC MVCC, 多版本并发控制 , 用于实现 读已提交 和 可重复读 隔离级别。 MVCC的核心就是 Undo log多版本链 + Read view ,“MV”就是通过 Undo log来保存数据的历史版

    2024年02月09日
    浏览(47)
  • MySql的MVCC机制

    在读已提交的级别下,事务B可以读到事务A持有写锁的的记录,且读到的是未更新前的,为何写读没有冲突? 可重复读级别,事务B可以更新事务A已经获取读锁的记录,且更新后,事务A依然可以获取读锁,为何读-写-读没有冲突? 在可重复读级别,幻读没有产生 其中,前两个

    2024年02月08日
    浏览(31)
  • mysql之MVCC

    ​ 1、概念 mvcc作用在于解决并发条件下,读写冲突的问题。一般用于RC和RR隔离级别,解决脏读和不可重复读的问题。 (1)当前读 读取的是记录的最新版本,读取时还要保证其他事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select ... lock in

    2024年01月21日
    浏览(28)
  • 《MySQL MVCC 》

    MVCC (Multi-Version Concurrency Control)是一种基于多版本的并发控制协议,只有在 InnoDB 引擎下存在。MVCC 是为了实现事务的隔离性,即通过版本号,避免同一数据在不同事务间的竞争,可以把它当成基于多版本号的一种乐观锁。当然,这种乐观锁只在事务级别读已提交(RC)和可重复读

    2024年02月22日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包