NEW个对象 > Spring > 当前页面

MySQL MVCC了解吗?

2024-10-24 NEW个对象

MVCC就是多版本并发控制,主要解决事务读写数据的1并发问题。

数据库并发场景有三种,分别为:

读-读:不存在任何问题,也不需要并发控制
读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读
写-写:有线程安全问题,可能会存在更新丢失问题

在数据库读读操作是没问题的,写写操作通过加锁的方式解决,读写操作通过mvcc来解决的。

读写操作能不能通过加锁方式解决呢,当然是可以的,但是性能太差,追求极致的技术大牛肯定是不允许的。

MVCC的实现原理是基于:当前读和快照读、undo log版本链、read view。

在RC(读已提交)和RR(可重复度)级别下,MVCC都会生效,那么为什么RC不可以解决幻读,而RR可以解决幻读?

原因: 两种隔离级别下的核心处理逻辑就是判断所有版本中哪个版本是当前事务可见的处理。针对这个问题InnoDB在设计上增加了ReadView的设计,ReadView中主要包含当前系统中还有哪些活跃的读写事务,把它们的事务id放到一个列表中,我们把这个列表命名为为m_ids。

以上内容是对于 RR 级别来说,而对于 RC 级别,其实整个过程几乎一样,唯一不同的是生成 ReadView 的时机,RR 级别只在事务开始时生成一次,之后一直使用该 ReadView。而 RC 级别则在每次 select 时,都会生成一个 ReadView。

相关文章

  • dubbo支持多种协议:

    dubbo支持多种协议:

    NEW个对象 2025-02-26

  • FactoryBean与BeanFactory区别

    1、BeanFactory是Spring框架的核心接口,它是Spring IoC容器的基础。BeanFactory负责创建、配置和管理Bean的生命周期。 2、FactoryBean是一个特殊的Bean,它自身是一个Bean,同时也充当了一个工厂的角色,如果返回的bean是FactoryBean,那么会调用它的getObject()方法获取对象。

    NEW个对象 2025-01-17

  • B树与B+树的区别

    B树与B+树的区别

    NEW个对象 2024-12-25