MySQL的MVCC

本文详细解释了MVCC(多版本并发控制)在InnoDB存储引擎中的应用,介绍了快照读、ReadView机制以及事务如何通过锁和Undolog实现并发控制,确保可重复读性。
摘要由CSDN通过智能技术生成

MVCC(多版本并发控制)multiversion concurrency control

读读并发:可以并发

读写并发(innoDB):MVCC机制解决 

写写:互斥

快照读:不加锁的简单select属于快照读,即不加锁的非阻塞读

快照读的基础是undolog版本链

聚簇索引中的隐藏列

trx_id:事务对数据改动时,事务将id赋值给trx_id

roll_pointer:旧值指针,roll_pointer生成undolog链

ReadView:快照读,它会告诉我们应该看到的快照

由四个部分组成:

1.creator_trx_id: 创建ReadView的事务的id

2.m_ids:活跃事务(在执行未提交)的id

3.min_trx_id: m_ids中的最小值(用于比较)

4.max_trx_id: 生成ReadView时,innoDB将要分配的下一个事务id

事务A(id:100)插入数据18;之后事务B(id:200)和C(id:300)并发执行,此时

creator_trx_id: 200

m_ids: 200 300

min_trx_id:200

max_trx_id:301

事务B(id:200)第一次查询时,会将隐藏字段trx_id(已提交事务A 的id)和min_trx_id进行比较,trx_id(100) 小于min_trx_id(200),则B可以查询到A的数据18;

此时事务C(300)修改了数据为20,并提交;

当事务B第二次查询时,但200<300<301,说明事务C是和事务B在同一时间段执行的,B就不能读到C的数据,通过 undo log版本链,此时读到的数据还是之前的18;

总之:ReadView保证可重复读,通过逻辑判断的非阻塞同步机制

mysql事务的本质:多线程访问同一资源的彼此之间的排序规则

控制事务的底层机制就是锁

锁的底层是MVCC

MVCC使用的是MySQL的Undolog(回滚日志)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值