当前位置:   article > 正文

深入理解MVCC与Buffer Pool缓存机制_深入理解mvcc和bufferpool

深入理解mvcc和bufferpool

一、MVCC多版本并发控制机制

首先来重新认识一下可重复读和串行化:
可重复读:mysql的默认隔离级别是可重复读,也就是在一个事务中,多次查询结果都相同。就算有其他事务修改了数据,也不会影响当前事务的查询结果。读操作不加锁,使用mvcc机制
串行化:读和写操作也加行锁,其他事务的所有读写操作都会被阻塞。
可重复读和串行化其实都是为了保证多次读到的数据一致,确保了隔离性。如果没有隔离性保障,那当其他事务修改数据时,java代码中的数据就在不断变化,就无法写代码了。
可重复读的这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的,对一行数据的读操作默认是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥。而在串行化隔离级别为了保证较高的隔离性是通过将所有操作加锁互斥来实现的,频繁加锁导致效率低下!

二、MVCC机制底层是怎么实现的–怎么保证可重复读的呢?

mvcc机制就是靠undo日志版本链和一致性视图read-view来实现的。

undo日志版本链与read view机制详解
undo日志版本链是指在多事务的情况下,多个事务对同一行数据进行修改,Mysql会通过一个日志版本链来记录旧的数据,如果事务未提交之前发生了回滚操作则可以回滚到原来的数据。
undo日志版本链通过trx_id和roll_pointer两个属性来维护的。

在可重复读隔离级别下,当一个事务第一次执行读操作的时候,Mysql会为该事务生成一致性事务。该视图由两部分组成。一部分是当前最大的事务id和未提交事务id组构成。并且将未提交事务组中事务id最小的记为min_id,最大的事务id记为max

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/575580
推荐阅读
  

闽ICP备14008679号