背景
MySQL的InnoDB引擎实现了多版本控制MVCC,其对RR和RC隔离级别提供了支持,RR和RC可以在快照读取数据,那InnoDB是如何支持快照读的呢?
MVCC 是如何操作的
童话里是这么说的
Select
InnoDB只查找版本小于或等于当前事务版本的数据行。确保事务读取到的行,要么是事务开始前就存在的,要么是事务自身插入或者修改的。
行的删除版本要么未定义,要么大于当前事务的版本。确保事务读取到的行,在事务开始之前未被删除。
行的删除版本要么未定义,要么大于当前事务的版本。确保事务读取到的行,在事务开始之前未被删除。
Insert
InnoDB为新插入的每一行保存当前系统版本号作为行版本号
Delete
InnoDB为删除的每一行保存当前系统版本号作为行删除标识
Update
InnoDB会插入一行新记录保存当前系统版本号作为行版本号,同时保存当前系统的版本号到原来的行作为行删除标识
思考:如果每创建一个事务,都保存当前时刻一份全量的快照的话,不考虑数据库能不能抗的住,上面这些操作有何意义?
MVCC的数据结构
MVCC两个基本的数据结构
行记录
Innodb引擎会为每一行添加3个字段实现的,DATA_TRX_ID、DATA_ROLL_PTR与DELETED_BIT:
DATA _TRX_ID表示产生当前记录项的事务ID(每开启一个新的事务,其对应的事务id会自动递增);
DATA_ROLL_PTR一个指向此条记录项的undo信息的指针,undo信息是指此条记录被修改前的信息;
DELETED_BIT位,用于标识该记录是否被删除。
DATA_ROLL_PTR一个指向此条记录项的undo信息的指针,undo信息是指此条记录被修改前的信息;
DELETED_BIT位,用于标识该记录是否被删除。
read view
RR读:每个事务在开始都会根据当前系统的活跃事务链表创建一个read_view,read_view是用来检索行的可见性的。
RC读:事务中,每个语句都会创建read_view。
假设当前的活跃事务链表如下所示:current-trx —> trx7 —> trx5 —> trx3 —> trx1;
Read View中的的变量则按如下方式初始化:
read_view->creator_trx_id = current-trx; 当前的事务id
read_view->up_limit_id = trx1; 当前活跃事务的最小id
read_view->low_limit_id = trx7; 当前活跃事务的最大id
read_view->trx_ids = [trx1, trx3, trx5, trx7]; 当前活跃的事务的id列表
read_view->m_trx_ids = 4; 当前活跃的事务id列表长度
read_view->up_limit_id = trx1; 当前活跃事务的最小id
read_view->low_limit_id = trx7; 当前活跃事务的最大id
read_view->trx_ids = [trx1, trx3, trx5, trx7]; 当前活跃的事务的id列表
read_view->m_trx_ids = 4; 当前活跃的事务id列表长度
以上是read view中变量组成,下面来分析一下快照的形成过程
相关推荐
"理解MVCC与BufferPool缓存机制" 本节课主要讲解了MySQL中的MVCC(Multi-Version Concurrency Control)机制和BufferPool缓存机制。 一、MVCC机制 MVCC机制是一种多版本并发控制机制,用于保证事务的隔离性。在可...
### 深入理解MVCC与BufferPool缓存机制 #### 一、MVCC多版本并发控制机制 **MVCC**(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库事务处理的重要技术,它允许读取操作和写入操作在不相互...
当你使用PostgreSQL来设计高并发的应用时,理解它的MVCC是怎么实现的很重要。它事实上是复杂问题的一种非常优雅和简单的解法。 MVCC如何工作 在Postgres中,每一个事务都会得到一个被称作为 XID 的事务ID。这里说的...
本文将深入探讨undo log版本链的概念、作用以及它在MVCC中的具体应用。 首先,我们需要理解undo log。在数据库系统中,undo log是一个记录事务对数据进行修改之前状态的日志。当事务回滚或需要提供读一致性时,undo...
标题 "pg_activity-master_made_python_pg_" 暗示我们关注的是一个与PostgreSQL数据库相关的项目,...通过深入理解MVCC的工作原理和使用Python的`psycopg2`库,开发者和DBA可以更好地理解和维护他们的PostgreSQL环境。
在"mysql官方资料_第三版.rar"这个压缩包中,包含了一份详细的MySQL官方文档,尤其是对于想要深入理解MVCC(多版本并发控制)以及MySQL的底层机制的读者来说,这份资料是不可多得的资源。 MVCC是数据库并发控制的一...
- 对于并发控制和数据库系统开发者,它可以作为理解MVCC工作原理和实现细节的实践平台。 - 对于任何希望提升并发编程技能的人来说,研究这个项目将有助于理解和掌握并发控制策略。 通过深入研究这个项目,你可以...
3. 并发控制和事务处理:深入理解MVCC(多版本并发控制)在InnoDB中的工作方式,以及MySQL如何处理事务的ACID属性。 4. 索引结构:研究B树、哈希索引等数据结构,以及它们在查询优化中的作用。 5. 网络通信:MySQL...
MySQL的多版本并发控制(MVCC)是一种用于...通过理解以上概念,我们可以深入理解MVCC的工作原理,以及它如何在MySQL中支持高并发和事务一致性。在实际应用中,理解这些细节对于优化数据库性能和解决并发问题至关重要。
这些字段对于理解MVCC的工作机制至关重要: - `xmin`:在创建tuple时,记录插入该tuple的事务的XID。表示此数据版本是由哪个事务生成的。 - `xmax`:默认值为0,表示tuple未被删除。当tuple被删除时,`xmax`会被...
分析这两个系统之间的异同,可以帮助我们更深入地理解数据库并发控制的原理。 undo log有两种格式:insert undo log和update undo log。前者只在插入数据时生成,而后者在更新数据时生成,且更受关注,因为它涉及到...
面试官:什么是 MySQL 事务与 MVCC 原理? 本文主要讲解了 MySQL 中的事务(Transaction)...本文通过详细的解释和实例,帮助读者深入了解 MySQL 中的事务和 MVCC 原理,并提供了实际应用中可能遇到的问题和解决方案。
【深入浅出INNODB MVCC机制与原理】 在数据库管理系统中,MVCC(多版本并发控制)是一种用于提高并发性能的技术,尤其在事务性存储引擎如InnoDB中被广泛应用。本文将深入探讨MVCC的基本概念,实现原理,并通过实例...
在深入分析MySQL加锁处理之前,首先需要了解MySQL数据库的基本架构以及锁机制的相关概念。MySQL是一个支持插件式存储引擎的数据库系统,其中InnoDB存储引擎因其支持事务处理和外键约束而被广泛使用。本文将重点讨论...
《深入理解MySQL核心技术》这本书是数据库管理员和开发人员掌握MySQL技术的重要参考资料。...通过学习本书,读者不仅能掌握MySQL的基本操作,还能深入了解其底层机制,从而更好地设计、优化和管理数据库系统。
通过阅读《Oracle编程艺术-深入数据库体系结构》,读者不仅能掌握Oracle数据库的基础知识,还能深入了解其复杂的运行机制,从而在实践中更有效地管理和优化数据库系统。这本书是Oracle DBA和开发者提升专业能力的...
6. **并发控制与事务管理**:Oracle使用多版本并发控制(MVCC)来实现事务的隔离级别,书中有望深入讨论行级锁定、死锁检测及解决策略。 7. **高可用性与灾难恢复**:介绍RAC(Real Application Clusters)、数据...
总的来说,深入理解MySQL的事务隔离级别和锁机制对于优化数据库性能、保证数据一致性以及解决并发问题具有重要意义。通过灵活运用这些知识,我们可以更好地设计和维护数据库系统,确保其稳定、高效地运行。