MVCC:多版本并发控制案例分析(二)

这篇具有很好参考价值的文章主要介绍了MVCC:多版本并发控制案例分析(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(笔记总结自b站马士兵教育课程)

本文主要分析readview的案例。

一、简介

readview:表示事务进行快照读操作的时候产生的读视图,在该事务进行快照读的那一刻会生成一个系统当前的快照,但是此时的快照不是数据的快照,而是事务相关信息的快照。

trx_list readview生成时刻当前系统活跃的事务id
up_limit_id 活跃列表中事务id最小的值
low_limit_id 系统尚未分配的下一个事务的id

二、基本案例 

首先介绍可见性算法:

①首先比较DB_TRX_ID<up_limit_id,如果小于,则当前事务能看到DB_TRX_ID所在的记录,如果大于等于进入下一个判断。

②接下来判断DB_TRX_ID>=low_limit_id,如果大于等于则代表DB_TRX_ID所在的记录在readview生成后才出现的,那么对于当前事务肯定不可见,如果小于,则进入下一步判断。

③判断DB_TRX_ID是否在活跃事务中,如果在,则代表在readview生成时刻,这个事务还是活跃状态,还没有commit,修改的数据,当前事务也是看不到,如果不在,则说明这个事务在readview生成之前就已经开始commit,那么修改的结果也是能够看到的。

基本案例分析:

时刻 事务1 事务2 事务3
t1 begin; begin; begin;
t2

update;

commit;

t3 select;

针对t3时刻事务1的select操作的readview快照:

trx_list 1,3
up_limit_id 1
low_limit_id 4
DB_TRX_ID 2

我们对此案例进行可见性算法分析:

①因为DB_TRX_ID>up_limit_id,所以进入下一步判断。

②因为DB_TRX_ID<low_limit_id,所以进入下一步判断。

③DB_TRX_ID不在trx_list活跃事务中,所以可读。

综上,事务1的select操作可以读到更新之后的结果值。

三、综合案例

时刻 事务1 事务2 事务3
t1 begin; begin; begin;
t2 *select;

select;

t3

update;

commit;

t4 **select;

我们首先分析*select的readview快照:

trx_list 1,2,3
up_limit_id 1
low_limit_id 4
DB_TRX_ID 0

可见性算法分析结果:可读。

我们再分析 **select的readview快照:

trx_list 1,3
up_limit_id 1
low_limit_id 4
DB_TRX_ID 2

可见性算法分析结果:可读。

但是实验结果是不可读的,其实这里**select沿用了上一次的*select产生的readview快照,但是DB_TRX_ID是新生成的:

trx_list 1,2,3
up_limit_id 1
low_limit_id 4
DB_TRX_ID 2

 可见性算法分析结果:不可读。这样就和实验结果一致了。

四、关于隔离级别

不可重复读:在同一个事务中,两次相同的操作读取的数据是不一样的。

RC:读已提交。

RR:重复读。

在RC隔离级别的时候,每一次进行快照读都会生成新的readview。上述案例我们可以发现存在不可重复读的问题。

在RR隔离级别的时候,只有在第一次进行快照读的时候才会生成readview,之后的快照读都会沿用之前的readview,不会重新生成。上述案例我们可以发现解决了不可重复读的问题。

两个隔离级别的区别点在于生成readview的时机不同。文章来源地址https://www.toymoban.com/news/detail-718635.html

到了这里,关于MVCC:多版本并发控制案例分析(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL的多版本并发控制(MVCC)

    MVCC MVCC,是Multiversion Concurrency Control的缩写,翻译过来是多版本并发控制,和数据库锁样,他也是一种并发控制的解决方案 我们知道,在数据库中,对数据的操作主要有2种,分别是读和写,而在并发场景下,就可能出现以下 旦三种情况:读-读并发,读-写并发,写-写并发 我

    2024年01月18日
    浏览(48)
  • MVCC并发版本控制之重点ReadView

    本文大部分来自 《MySQL是怎样运行的》,这里只是简单总结,用于各位回忆和复习。 对于使用 InnoDB 存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(不知道的快去看《MySQL是怎样运行的》) trx_id :每次一个事务对某条聚簇索引记录进行改动时,都会把该事

    2024年02月09日
    浏览(36)
  • MySQL多版本并发控制mvcc原理浅析

    1.mvcc简介 1.1mvcc定义 mvcc(Multi Version Concurrency Control),多版本并发控制,是一种数据库的并发控制机制。它用于管理事务并发执行时对数据的访问和修改,保证在多个事务同时对数据库进行读写操作,不会出现数据不一致或丢失的情况 1.2mvcc解决的问题 当多个事务同时访问数据

    2024年04月25日
    浏览(36)
  • 【MySQL】事务之MVCC(多版本并发控制)

    读-读 :不存在任何问题,也不需要并发控制 读-写 :有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读 写-写 :有线程安全问题,可能会存在更新丢失问题,比如第一类更新丢失,第二类更新丢失 多版本并发控制 ( MVCC )是一种用来解决 读

    2024年02月14日
    浏览(46)
  • 【MySQL高级篇笔记-多版本并发控制MVCC(下) 】

    此笔记为尚硅谷MySQL高级篇部分内容 目录 一、什么是MVCC 二、快照读与当前读 1、快照读  2、当前读 三、复习 1、再谈隔离级别 2、隐藏字段、Undo Log版本链 四、MVCC实现原理之ReadView  1、什么是ReadView  2、设计思路 3、ReadView的规则 4、MVCC整体操作流程 五、举例说明 1、READ

    2024年02月08日
    浏览(61)
  • ⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ InnoDB逻辑存储结构 : 🚀 表空间(idb文件) :一个MySQL实例可以对应多个表空间,用于存储记录、索引等数

    2024年02月04日
    浏览(44)
  • 深入探索MySQL InnoDB引擎中的多版本并发控制(MVCC)原理

    引言: 在关系型数据库领域,MySQL InnoDB引擎因其支持事务处理和并发控制的强大功能而备受青睐,其中尤为关键的一项技术就是多版本并发控制(Multi-Version Concurrency Control, MVCC)。MVCC是实现高并发环境下事务隔离性的重要手段,既能有效缓解锁竞争,又能保障数据的一致性

    2024年03月11日
    浏览(48)
  • 案例分析真题-数据库

    【问题1】 【问题2】 【问题3】 【问题1】 【问题2】 【问题3】 骚戴理解 :这里主要是要学会分析出题目中哪里用到了反规范化技术,主打的就是一个会分析! 【问题1】 【问题2】 【问题3】 【问题1】 【问题2】 骚戴理解 :这题第二小问,根据它给出的客户基本信息用关系

    2024年02月08日
    浏览(38)
  • MYSQL的多版本并发控制MVCC(Multi-Version Concurrency Control)

    MVCC 是一种用于数据库管理系统的并发控制技术,允许多个事务同时访问数据库,而不会导致读写冲突。也就是说在读写的时候,线程不用去争抢读写锁。因为加锁的过程比较耗性能。 当然很多时候还是必须的,不能避免,比如说,去ATM机取钱的时候,同时又在手机APP上进行

    2024年02月07日
    浏览(40)
  • Mysql--技术文档--MVCC(Multi-Version Concurrency Control | 多版本并发控制)

            MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于解决并发访问数据库时的数据一致性和隔离性问题。MVCC允许多个事务同时读取数据库的同一数据,而不会相互干扰或导致冲突。         在传统的并发控制机制中,如锁定机制,事务会对读取和写入

    2024年02月11日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包