MySQL的MVCC

目录

1.MVCC基本概念

1.当前读:

2.快照读:

 3.MVCC:Multi-Version Concurrency Control,多版本并发控制:

2.MVCC实现原理-三个隐藏字段

3.MVCC实现原理-undo log日志

1.undo log:回滚日志

2.undo log版本链

4.MVCC实现原理:readView

1.ReadView,读视图:

2.版本链数据访问规则

5.不同隔离级别下的readView

1.在RC,Read Committed下:

2.在RR,Repeatable Read下:

6.MVCC+锁:


1.MVCC基本概念


1.当前读:

        读取的是记录的最新版本,读取时保证其他并发事务无法修改当前记录,会对读取的记录加锁


2.快照读:

        读取的是记录的可见版本,可能是历史数据,不加锁,比如简单的select就是快照读
    * 默认的隔离级别下:开启事务后第一个select语句就是快照读的地方,后续select时查询的就是快照数据
    * 是非阻塞读的,因为都可以读到快照数据

  
3.MVCC:Multi-Version Concurrency Control,多版本并发控制:

        指维护一个数据的多个版本,使得读写操作没有冲突
    * 快照读就为MVCC提供了一个非阻塞读功能
    * MVCC的实现原理:数据库中的三个隐式字段、undo log日志、readView

2.MVCC实现原理-三个隐藏字段


* 记录中的隐藏字段

* 两个或者三个(DB_ROW_ID是没有主键才会自动生成的)

3.MVCC实现原理-undo log日志


1.undo log:回滚日志


    * 在insert、update、delete时产生的便于数据回滚的日志
    * insert时,产生的undo log只在回滚时需要,事务提交后,可以立即删除
    * update、delete时,产生的undo log日志不仅在回滚时需要,快照读时也需要,不会立即删除


2.undo log版本链


    * 不同事务对同一条记录进行修改,会导致该记录的undo log生成一条记录版本链条,链条的头部是最新的旧记录,链条的尾部是最早的旧记录

4.MVCC实现原理:readView


1.ReadView,读视图:

是快照读SQL执行时MVCC提取数据的依据,记录并维护当前活跃(未提交)的事务ID
  简单来说:快照读在读取时可以读取历史版本,而undo log日志形成的版本链产生了很多历史记录,readView是用来判断读取哪一个历史记录的
* readView包含四个核心字段:

2.版本链数据访问规则


    * trx_id:当前事务id

5.不同隔离级别下的readView

1.在RC,Read Committed下:

        事务中每一次执行快照读生成ReadView

2.在RR,Repeatable Read下:

        仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView(同一个事务中读取两条相同数据是一样的,从而保证可重复读)

6.MVCC+锁:

        保证了事务的隔离性和一致性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值