IT老齐架构300讲笔记(030) MySQL MVCC机制

目录

MVCC

1.隔离级别​

2.场景分析 ​

 ReadView

1.ReadView数据结构

2.读已提交(RC):在每一次执行快照读时生成ReadView

3.可重复读(RR):仅在第一次执行快照读时生成ReadView,后续快照读复用


MVCC

1.隔离级别

MySQL InnoDB存储引擎下,RCRR基于MVCC多版本并发控制)进行并发事务控制

MVCC基于”数据版本”对并发事务进行访问

2.场景分析

 

UNDO_LOG不是会被删除吗?中间数据万一被删了版本链不就断了?

UNDO_LOG版本链不是立即删除,MySQL确保版本链数据不再被“引用”后再进行删除

 ReadView

ReadView快照读SQL执行时MVCC提取数据的依据.

快照读就是最普通Select查询SQL语句

当前读指代执行下列语句时进行数据读取的方式

InsertUpdateDelete

Select...for update

Select...lock in share mode

1.ReadView数据结构

ReadView是一个数据结构,包含4个字段

  • m_ids:当前活跃的事务编号集合
  • min_trx_id:最小活跃事务编号
  • max_trx_id:预分配事务编号,当前最大事务编号+1
  • creator_trx_id:ReadView创建者的事务编号

2.读已提交(RC):在每一次执行快照读时生成ReadView

 3.可重复读(RR):仅在第一次执行快照读时生成ReadView,后续快照读复用

 RR级别下使用MVCC能避免幻读吗?

能,但不完全能!

  1. 连续多次快照读,ReadView会产生复用,没有幻读问题

  2. 当两次快照读之间存在当前读ReadView会重新生成,导致产生幻读

 

猜你喜欢

转载自blog.csdn.net/panjianlongWUHAN/article/details/122486550