Mysql-MVCC原理理解

一、什么是MVCC

    Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。
    大多数的MySQL事务型存储引擎,如InnoDB,Falcon以及PBXT都在使用一种简单的行锁机制。事实上,他们都和另外一种用来增加并发性的被称为“多版本并发控制(MVCC)”的机制来一起使用。MVCC不只使用在MySQL中,Oracle、PostgreSQL,以及其他一些数据库系统也同样使用它。
    你可将MVCC看成行级别锁的一种妥协,它在许多情况下避免了使用锁,同时可以提供更小的开销。根据实现的不同,它可以允许非阻塞式读,在写操作进行时只锁定必要的记录。

二、前置知识

从第一节我们可以知道MVCC是和事务挂钩的,而mysql常用的存储引擎Innodb和MysIsam中MyIsam是不支持事物的,所以这里说明一下后面的例子都默认存储引擎是Innodb。

然后就需要谈到mysql的四种事务隔离级别了:

  • Read Uncommitted (读未提交)
    这种隔离级别会产生脏读、不可重复读、幻读现象
  • Read Committed (读已提交)
    这种隔离级别会产生不可重复读、幻读现象
  • Repeatable Read (可重复读)
    mysql默认隔离级别,这种隔离级别会产生幻读现象
  • Serializable (可串行化)

需要了解更多可以看这个博客:https://developer.aliyun.com/article/743691

MVCC只在 Read CommittedRepeatable Read
两个隔离级别下工作。其他两个隔离级别都和MVCC不兼容, 因为 Read Uncommitted 总是读取最新的数据行,而不是符合当前事务版本的数据行。而 Serializable 则会对所有读取的行都加锁。

MVCC底层实现原理

1.数据记录的三个隐藏字段
DB_TRX_ID : 事务id (mvcc相关)
占6字节,表示这一行数据最后插入或修改的事务id。此外删除在内部也被当作一次更新,会在行的特殊位置添加一个删除标记,值为true(记录头信息有一个字节存储是否删除的标记)
DB_ROLL_PTR :回滚指针 (mvcc相关)
占7字节,回滚指针指向被写在undoLog记录里,在该行数据被更新的时候,undoLog会记录该行修改前内容到undoLog。
DB_ROW_ID: 行ID
占7字节,他就项自增主键一样随着插入新数据自增。如果表中不存主键 或者 唯一索引,那么数据库 就会采用DB_ROW_ID生成聚簇索引。否则DB_ROW_ID不会出现在索引中。

2.undo log版本链
每次对数据进行更新操作时,都会copy 当前数据,保存到undo log 中。并修改 当前行的 回滚指针指向 undo log 中的旧数据行。

3.read-view(一致化视图)的可见性规则
read-view存储数据结构: [当前未提交事务id组成的数组]+当前最大事务id
在这里插入图片描述
1.当前事务id<min_id(绿色区域),该记录则在当前事务可见,因为修改该版本记录的事务在当前事务生成 Read View 之前就已经提交。

2.当前事务id>max_id(紫色区域),该记录在当前事务不可见,因为修改该版本记录的事务在当前事务生成 Read View 之前还未开启。

3.当前事务id在[min_id,max_id]区间(黄色部分):

  • 当前事务id在未提交事务id数组范围内,那么该记录在当前事务不可见,因为需改该版本记录的事务在当前事务生成 Read View 之前还未提交;
    如果是自己的事务(当前事务id等于创建Read View的事务id),则可见。
  • 当前事务id不在未提交事务id数组范围内,该记录则在当前事务可见

案例图解及分析

更新中~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值