innoDB的MVCC实现方式

简介: innodb的MVCC是通过在每行记录后面保存两个隐藏的列来实现。一个保存行的创建时间,一个保存行的过期时间,存储的值为系统版本号。每开启一个新的事务,系统版本号都会自动增加。

innodb的MVCC是通过在每行记录后面保存两个隐藏的列来实现。一个保存行的创建时间,一个保存行的过期时间,存储的值为系统版本号。每开启一个新的事务,系统版本号都会自动增加。在repeatable read隔离级别下,MVCC的具体操作:

  • select

    • innodb会根据以下两个条件检查每行记录:
      • innodb只查找版本早于当前事务版本的数据行。
      • 行删除版本要么未定义,要么大于当前事务版本号
  • insert

    • innodb为新插入的每一行保存当前系统版本号作为行版本号
  • delete

    • innodb为删除每一行保存当前系统版本号作为行删除标识
  • update

    • innodb为插入一行新纪录,保存当前系统版本号为行版本号,同时保存当前系统版本号为原来行删除标识

保存这两个额外系统版本号,使大多数读操作都可以不用加锁。但是会增加额外的存储空间,需要做更多的行检查和额外的维护工作

MVCC只在repeatable read和read committed两个隔离级别工作。read uncommitted总是读取最新数据。serializable则会对所有读取的行都加锁

目录
相关文章
|
7月前
|
存储 缓存 关系型数据库
⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制
⑩⑧【MySQL】InnoDB架构、事务原理、MVCC多版本并发控制
223 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
2月前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
273 4
|
3月前
|
关系型数据库 MySQL 数据库
InnoDB 的 MVCC 实现原理
InnoDB 的 MVCC 实现原理
47 0
|
5月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
51 2
|
存储 算法 Oracle
PostgreSQL的MVCC vs InnoDB的MVCC
PostgreSQL的MVCC vs InnoDB的MVCC
98 0
PostgreSQL的MVCC vs InnoDB的MVCC
|
算法 关系型数据库 MySQL
简述Mysql InnoDB的MVCC机制
简述Mysql InnoDB的MVCC机制
161 0
简述Mysql InnoDB的MVCC机制
|
存储 SQL 算法
MySQL InnoDB MVCC机制
MySQL InnoDB MVCC机制
223 0
|
SQL 存储 算法
InnoDB解决幻读的方案--LBCC&MVCC
InnoDB解决幻读的方案--LBCC&MVCC
199 0
InnoDB解决幻读的方案--LBCC&MVCC
|
监控 关系型数据库 MySQL
Innodb MVCC
mvcc标准机制 多版本并发控制(Multiversion concurrency control)。 当对数据进行写操作时,不允许对被操作数据进行读操作,这样会导致数据库并发性能低下。于是用mvcc在并发访问(读或写)数据库时,对正在事务内处理的数据做多版本的管理,以降低写操作的堵塞而引发读操作的并发问题。
1799 0