MySQL MVCC学习总结

MVCC是一种用于数据库并发控制的技术,主要在读已提交和可重复读的事务隔离级别下工作。它借助UndoLog记录数据旧值以备恢复,并通过ReadView来判断记录对当前事务的可见性。在读已提交级别,每次查询都有新ReadView,而在可重复读级别,ReadView只在事务开始时创建一次。MVCC通过比较事务ID和ReadView中的信息来决定数据记录的可见性。
摘要由CSDN通过智能技术生成

概念

MVCC(Multi-Version Concurrency Control)多版本并发控制,用于实现高并发读写操作。

说明

MVCC只有在事务隔离界别:读已提交(Read Commited)和可重复读(Repeatable Read)的隔离接别下工作。

原理

MVCC是借助UndoLog和ReadView实现的。

关于UndoLog

  • 当事务执行修改数据操作时,Undo Log 记录了旧值的备份,以便在事务回滚或其他需要时恢复数据;并且会在最新记录的隐藏字段DB_ROLL_PTR中记录上一版本UndoLog地址
  • UndoLog还用在事务回滚中

关于ReadView

首先介绍一下几个重要参数:

  • m_ids:记录所有当前记录活跃事务的id列表
  • min_trx_id:记录m_ids中最小值
  • max_trx_id:记录m_ids中最大值的下一个值
  • creator_trx_id:记录生成ReadView时的事务id

说明:
在Read Commited隔离级别,每次查询都需要创建新的ReadView
在Repeatable Read隔离级别,在事务开始前创建ReadView,在本事务中所有查询都用这一个ReadView,不会再次去创建ReadView。

MVCC工作原理

  1. 判断记录中隐藏字段trx_id是否在m_ids中
  • 如果在,则说明trx_id事务还处于活跃状态(没有提交或者回滚),该版本记录对当前事务不可见
  • 如果不存在,则说明trx_id事务已经提交,该版本记录对当前事务可见
  1. 如果trx_id<min_trx_id,说明是在当前事务创建ReadView前已经提交,该版本记录对当前事务可见
  2. 如果trx_id==creator_trx_id,说明当前事务对记录进行修改,在同一个事务内肯定时可见
  3. 如果trx_id>=max_trx_id,说明最新版本记录是在当前事务之后修改的,该版本记录对当前事务不可见
    按照以上逻辑,当前事务获取最新版本记录来判断可见不可见,如果可见则直接返回该版本记录,如果不可见则需要根据隐藏列DB_ROLL_PTR来查询上个版本记录,继续按照以上逻辑进行判断,直到找到可见版本。

这个东西还是有些抽象,有些绕,大家多花点时间肯定能想通,能搞明白的!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值