企业名称:重庆赛烽达科技有限公司
联系人:程老师
手机:13372708242
邮箱:xqzhang@saifengda.com
网址:www.cqora.com
地址:重庆石桥铺高创锦业17-3
MySQL MVCC学习介绍
什么是MVCC
什么是当前读取和快照读取?
当前读取、快照读取和MVCC之间的关系
MVCC实施原则
隐式字段
撤消日志
阅读视图(阅读视图)
整个过程
与MVCC有关的问题
RR如何在RC水平的基础上解决不可重复读取的问题?
在RC和RR级别下InnoDB快照读取有什么区别?
一、房地概述
什么是MVCC?
多版本并发控制
MVCC,多版本并发控制的全称,是多版本并发控制。MVCC是一种并发控制方法。一般在数据库管理系统中,用编程语言实现对数据库和事务内存的并发访问。
MySQL InnoDB中MVCC的主要目的是提高高数数据库的并发性能,以更好的方式处理读写冲突,这样即使有读写冲突,也可以同时读取,不需要锁定和阻塞
什么是当前读取和快照读取?
在学习MVCC多版本并发控制之前,首先要了解MySQL InnoDB下什么是当前读取和快照读取。
当前读数
选择锁定共享模式,选择更新;更新、插入、删除(排他锁)都是当前读取。为什么它们被称为当前读取?也就是说,它读取记录的最新版本。读取时,必须确保其他并发事务不能修改当前记录并锁定读取的记录。
快照读取
与未锁定的选择操作一样,它是快照读取,即未锁定的非阻塞读取;快照读取的前提是隔离级不是串行级,串行级下的快照读取会退化为电流读取;发生快照读取的原因是基于提高并发性能的考虑。快照读取的实现是基于多版本并发控制的,也就是MVCC,可以认为是行锁的变体,但是很多情况下避免了锁操作,降低了开销;因为它基于多个版本,所以快照读取不一定是数据的最新版本,而可能是以前的版本历史
说白了,MVCC是实现读写冲突不锁,这个读指的是快照读,不是当前读,实际上是一个锁操作,是悲观锁的实现
当前读取、快照读取和MVCC之间的关系
准确地说,MVCC多版本并发控制指的是“维护一个数据的多个版本,以便在读和写操作之间没有冲突”的概念。这只是一个理想的概念
在MySQL中,要实现MVCC这样一个理想的概念,需要MySQL提供具体的功能来实现,快照读取是MySQL实现MVCC理想模式的具体非阻塞读取功能之一。相对而言,当前阅读是悲观锁的具体功能实现
说得详细一点,快照阅读本身也是一个抽象的概念,需要进一步研究。MySQL中MVCC模型的具体实现由三个隐式字段完成,撤销日志、读视图等。有关详细信息,请参见以下MVCC实施原则
MVCC能解决什么问题?有什么优势?
数据库有三种并发场景,分别是:
读-读:没有问题,不需要并发控制
读写:cable进程存在安全问题,可能导致事务隔离问题,可能会遇到脏读、幻读、不可重复读
写入-写入:由于电缆安全问题,可能会出现更新丢失问题,例如第一种类型的更新丢失和第二种类型的更新丢失
MVCC有什么好处?
多版本并发控制(MVCC)是一种用于解决读写冲突的无锁并发控制,即向事务分配一个单向递增的时间戳,为每次修改保存一个版本,版本与事务时间戳相关联。读取操作仅在事务开始之前读取数据库的快照。因此,MVCC可以为数据库解决以下问题
当同时读取和写入数据库时,可以在不阻塞写操作和写操作的情况下完成,这提高了同时读取和写入数据库的性能
同时也可以解决脏读、幻读、不可重复读等事务隔离问题,但不能解决更新丢失问题