通过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行
数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。
但是InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的系统版
本号。这是一个随着事务的创建而不断增长的数字。每个事务在事务开始时会记录它自己的系统版本号。每个查询必须去检查每行数据的版本号与事务的版本号是否
相同。
让我们来看看当隔离级别是REPEATABLE READ时这种策略是如何应用到特定的操作的:
SELECT InnoDB必须每行数据来保证它符合两个条件:
1、InnoDB必须找到一个行的版本,它至少要和事务的版本一样老(也即它的版本号不大于事务的版本号)。这保证了不管是事务开始之前,或者事务创建时,或者修改了这行数据的时候,这行数据是存在的。
2、这行数据的删除版本必须是未定义的或者比事务版本要大。这可以保证在事务开始之前这行数据没有被删除。
符合这两个条件的行可能会被当作查询结果而返回。
INSERT:InnoDB为这个新行记录当前的系统版本号。
DELETE:InnoDB将当前的系统版本号设置为这一行的删除ID。
UPDATE:InnoDB会写一个这行数据的新拷贝,这个拷贝的版本为当前的系统版本号。它同时也会将这个版本号写到旧行的删除版本里。
这种额外的记录所带来的结果就是对于大多数查询来说根本就不需要获得一个锁。他们只是简单地以最快的速度来读取数据,确保只选择符合条件的行。
这个方案的缺点在于存储引擎必须为每一行存储更多的数据,做更多的检查工作,处理更多的善后操作。
MVCC维持一个数据的多个版本使读写操作没有冲突
开始时对版本号的比较不是太明白,后来想了想大概是这么一回事:因为事务A更新(update,delete,insert)时被改动的那一行的版本都会重新标记为与它所在事务A一样,因此如果这个事务执行期间,有另一个事务B(B事务执行时间早于A因此B的版本号小于A)该行操作(select)就会出现B的版本号比该行的版本号“老”(小),因此改动的行不会被选出,而选出旧版本的行。
分享到:
相关推荐
4. **事务与并发控制**:MySQL支持ACID(原子性、一致性、隔离性和持久性)特性,笔记会涉及事务的四大操作(BEGIN、COMMIT、ROLLBACK、SAVEPOINT)和并发控制机制,如锁定和MVCC(多版本并发控制)。 5. **存储...
这篇源码阅读笔记将探讨 MySQL 的核心组件和关键特性。 首先,MySQL 的源码结构复杂,主要包括以下几个部分: 1. **SQL层**:这是MySQL与用户交互的接口,处理SQL语句的解析、预处理、优化和执行。解析器负责将SQL...
InnoDB通过MVCC(多版本并发控制)和行级锁定实现并发,减少锁冲突。 7. **分区与分片**:大型数据库常用分区或分片技术来分散负载,提高查询效率。分区是将大表逻辑上划分为较小的部分,而分片则是物理上将数据...
6. **存储引擎**:介绍InnoDB和MyISAM两大主流存储引擎的特点和适用场景,以及InnoDB的行锁定和MVCC机制。 7. **视图与触发器**:创建和使用视图以简化复杂查询,以及如何定义和应用触发器来自动化执行特定操作。 ...
3. **存储引擎**:MySQL有多种存储引擎,如InnoDB和MyISAM。InnoDB是默认引擎,支持事务处理、行级锁定和外键约束,适用于需要ACID特性的业务。MyISAM则强调读取性能,不支持事务,适合读取密集型应用。还有Memory...
3. 并发控制:死锁的概念及处理,以及InnoDB存储引擎的MVCC(多版本并发控制)机制。 五、存储引擎 1. 存储引擎对比:InnoDB(默认引擎,支持事务处理)与MyISAM(非事务处理,读写速度快)的区别。 2. 其他引擎:...
1. **存储引擎**: MySQL有多种存储引擎,如InnoDB(默认,支持事务处理和外键)、MyISAM(非事务,适合读取密集型应用)、Memory(数据存储在内存中)等,每种引擎都有其特定的应用场景。 2. **并发控制**: MySQL...
从MySQL 5.5开始,InnoDB成为默认存储引擎,其支持行级锁、MVCC和ACID特性,适合高并发应用。 随着网站规模的扩大,小型网络架构可能不再适用。中型网络架构适用于每秒请求在5000以下的场景,此时需要考虑更复杂的...
适合对mysql有一定基础的...2.2、MVCC多版本并发控制机制 3、Mysql日志 3.1、总体架构 3.2、INNODB日志 4、全局优化 4.1、全局参数配置 5、8.0新特性 5.1、Mysql8.0.17新特性 6、安装集群 6.1、单机版本 6.2、主从复制
4. 并发控制:在多用户环境中,MySQL使用锁定、MVCC(多版本并发控制)等技术来确保数据的一致性和完整性。 笔记内容可能涵盖: 笔记部分可能包括了对MySQL关键概念的解释、源码阅读的心得、性能调优技巧、问题排查...
本学习笔记将探讨MySQL的架构和锁机制,以帮助你更好地理解和优化数据库性能。 1. MySQL架构: MySQL的整体架构由多个模块组成,这些模块共同协作以提供高效的数据处理能力。 - 连接客户端:这是与MySQL服务器...
在MySQL的InnoDB存储引擎中,采用了一种称为“多版本并发控制”(MVCC)的技术,该技术与传统的基于锁的并发控制机制形成对比。MVCC的主要优势在于能够确保读取操作无需加锁,从而使得读写操作不会发生冲突。这一...
行锁是指只对数据库表中某一行记录加锁,MySQL中InnoDB存储引擎支持行锁,其目的是减少锁冲突,提高并发性。行锁的算法通常有: - 记录锁(Record Locks):锁住索引记录。 - 间隙锁(Gap Locks):锁住索引记录的...
5. **InnoDB引擎底层解析**:InnoDB是MySQL中最常用的事务型存储引擎,支持行级锁定和ACID特性。理解其事务处理机制、redo logs、undo logs、MVCC(多版本并发控制)对于解决并发问题和性能调优很有帮助。 6. **...
《高性能MySQL笔记》 在构建高性能的MySQL数据库系统中,设计合理的表结构、选用恰当的数据类型、优化SQL语句以及实现分区和读写分离是关键环节。以下将详细阐述这些知识点。 首先,InnoDB存储引擎利用多版本并发...
深入理解InnoDB的行锁定机制和MVCC(多版本并发控制)。 11. **分区与分片**:学习如何使用分区来提高大型表的查询效率,以及在分布式环境中的分片策略。 12. **日志系统**:了解错误日志、二进制日志和慢查询日志...
本资源包“Mysql源码整理_news4ep_mysql源码_MYSQL_”是数据库学习者在研究MySQL源码过程中的笔记和资料集合,旨在帮助用户更深入地了解MySQL的内部工作机制。 MySQL源码的学习可以从以下几个关键方面展开: 1. **...
通过以上对BufferPool、B+树索引、Explain工具、MVCC、Redo Log、Undo Log以及Binlog的介绍,我们可以了解到MySQL InnoDB存储引擎在处理数据缓存、索引优化、事务控制等方面的技术细节和实现原理。这些知识点对于...
- InnoDB支持MVCC,适合并发环境,而MyISAM更适合读密集型应用。 - InnoDB支持行级锁定,MyISAM是表级锁定。 - MyISAM在`SELECT COUNT(*)`上更快,但InnoDB提供更好的并发控制和事务安全性。 6. **其他知识点**...
1. InnoDB:作为MySQL的默认存储引擎,支持事务处理和行级锁定。理解其事务隔离级别,以及MVCC(多版本并发控制)在并发场景下的应用。 2. MyISAM:适用于读取密集型的应用,但不支持事务。与InnoDB相比,其磁盘I/O...