`

mysql Multiversion Concurrency Control机制(mvcc)

 
阅读更多
  
   在进行多事务,并发读写的管理时,Mysql的InnoDB引擎采用的是Multiversion Concurrency Control机制,MVCC机制也被其他数据库所采用。每种引擎实现MVCC机制的具体细节不同,但大体思想类似。因此了解其思想,结合场景去应用。

1、MVCC机制是行级锁的一种妥协,多线程事务读取时,避免使用锁,而是采用一种更小的开销,允许非阻塞读取,写操作进行时只锁定必要的记录

2、简单的实现方式:MVCC保存某个时间点上的数据快照。一个事务内,看到的是同一个版本的快照,数据一致。不同事务在同一时间点看到的数据会不一致,因为他们得到的数据版本不一样。InnoDB在每一行记录添加两个额外的隐藏值,分别记录创建时间,和过期(或者删除)时间,这里的时间并不是真正意义上的时分秒,而是事件发生时数据库记录的系统版本号。

(1)每个事务创建时,Innodb的系统版本号会增加,而事务会记录这个作为自己的版本号,如上所述,每条数据库记录会保存两个版本号,一个是创建,一个是过期。当进行查询操作时,遵循两个原则:
    a.满足查询条件的记录,其创建版本号必须不大于事务版本,这样保证数据是事务开始前创建
     b.过期版本必须是未定义或者大于事务版本,开始后才过期,这样的数据是可读的。

(2)当一个事务修改了数据之后,数据的版本号会变化。其他事务就不会读取修改后的数据,因为和它们创建时获取的版本号不一致。

insert:InnoDB为这个新行记录当前的系统版本号;
delete:InnoDB将当前的系统版本号设置为这一行的删除ID;
update:InnoDB会写一个这行数据的新拷贝,这个拷贝为当前的系统版本号。同时将这个版本号写到旧行的过期时间中。

(3)优点在于,大多数查询不需要获取额外的锁。但是Innodb会为每一行存储多个版本的数据。原理类似于copyonwrie。
(4)可以解决脏读和不可重复读的问题,但是解决不了幻读的问题。脏读就是,事务A读取一个事务B没提交的数据,然后事务B回滚了。MVCC保证事务A读取的肯定是上一个版本的。不可重复读也是同理,事务A只读取其创建时的版本数据,其他事务对数据的修改只会得到新的版本数据。幻读解决不了是因为事务A更新所有数据,而事务B插入数据,但是由于版本问题事务A不能更新新插入的数据。

转自:http://longlongchang.blog.51cto.com/4725201/1175930
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Concurrency Control and Recovery in Database Systems

    多版本并发控制(Multiversion Concurrency Control, MVCC) MVCC允许事务看到不同的数据版本,从而减少锁的使用,提高并发性能。每个数据项可以有多个版本,每个事务可以看到它开始时的快照,这样就减少了锁的...

    Concurrency Control and Recovery in Database Systems全本.pdf

    4. **多版本并发控制(Multiversion Concurrency Control, MVCC)**:每个事务看到的是数据的一个特定版本,而不是单一的数据状态。这样可以减少锁定带来的性能影响。 5. **冲突检测和恢复(Conflict Detection and...

    On Optimistic Methods for Concurrency Control

    3. **多版本并发控制(Multiversion Concurrency Control, MVCC)**:每个数据项可以存储多个版本,每个版本都有关联的时间戳或版本号。事务读取数据时,可以选择与其开始时间最接近的版本。这样即使在事务执行过程...

    Clojure分布式状态模型Avout.zip

    Avout 为 Clojure 的内存 state 模型带来分布式应用发布,通过提供一个分布式实现的 Clojure's Multiversion Concurrency Control (MVCC) STM ,相当于分布式、持久性和可扩展的 Clojure's Atom and Ref 并发原语。...

    Transactions: Concurrency Control and Recovery

    - **实现方法**:常见的并发控制技术包括锁机制(Lock-based)、乐观并发控制(Optimistic Concurrency Control, OCC)、多版本并发控制(Multiversion Concurrency Control, MVCC)等。 - **恢复**: - **定义**...

    数据处理:概念与技术 中文版

    此外,可能还涉及了并发控制机制,如锁定(Locking)、多版本并发控制(Multiversion Concurrency Control,MVCC)和死锁检测,这些都是解决并发问题的关键技术。 在分布式系统和客户-服务器架构中,数据处理的复杂...

    数据库系统原理英文课件:ch16 Concurrency Control.ppt

    Chapter 16 of "Database System Concepts," 5th Edition, by Silberschatz, Korth, and Sudarshan delves into the crucial topic of Concurrency Control in database systems. This chapter explores various ...

    java面试题包含了,快手,蚂蚁金服,美团,拼多多,腾讯等 大厂面试经验

    MVCC:多版本控制(Multiversion Concurrency Control): 指的是一种提高并发的技术。最早 的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后, 只有写写之间相互阻塞,其他三种操作都...

    数据库的并发控制技术分析.pdf

    另一种并发控制技术是多版本并发控制(Multiversion Concurrency Control, MVCC),如PostgreSQL和MySQL的InnoDB存储引擎。MVCC允许多个事务并行读取数据,每个事务都有自己的数据视图,即快照,这使得事务可以在不...

    Oracle Locking Survival Guide

    这两种锁定模式通过多版本并发控制(Multiversion Concurrency Control, MVCC)实现,MVCC确保了在读取数据时不会被正在进行的写操作阻塞,从而提高了系统的并发性能。 外键索引在锁定中扮演着重要角色,因为它们...

    Oracle9i的数据库管理, Oracle9i数据库对象的管理,Oracle9i数据库的安全性,Oracle9i数据库的完整性和并发控制等

    Oracle9i使用了多版本并发控制(Multiversion Concurrency Control, MVCC),通过读写一致性(Read-Write Consistency)和快照隔离(Snapshot Isolation)确保用户在执行事务时不会看到其他事务的中间状态。...

    SQL Server和Oracel中的锁和死锁

    Oracle的多版本并发控制(Multiversion Concurrency Control, MVCC)允许事务读取数据的旧版本,从而避免锁定当前事务正在修改的数据。 总结来说,SQL Server和Oracle在处理锁和死锁方面有各自的特点和策略。理解并...

    Oracle Concepts (10g R2) 双语版_V11

    5. **并发控制**:Oracle使用多版本并发控制(Multiversion Concurrency Control, MVCC),允许多个用户同时访问数据库而不冲突。 6. **备份与恢复**:Oracle提供多种备份策略,如RMAN(恢复管理器)和物理/逻辑...

    计算机软件-商业源码-261 提示数据库正在使用.zip

    常见的并发控制机制包括锁定、乐观并发控制(Optimistic Concurrency Control)和多版本并发控制(Multiversion Concurrency Control, MVCC)。 2. **锁定**:数据库通过锁定数据记录或整个表来防止并发冲突。有...

    sqlite源码。。。。。。。

    7. **锁机制(Locking Mechanism)**:SQLite采用多版本并发控制(Multiversion Concurrency Control, MVCC)来处理并发操作,确保多个连接可以同时读取数据库,而写操作则会加锁以防止冲突。 8. **错误处理和日志...

    Oracle锁 图例

    Oracle采用多版本并发控制(Multiversion Concurrency Control, MVCC)机制,每个事务看到的数据是基于事务开始时的一致性视图。当事务尝试访问被锁定的资源时,会根据锁的类型进行等待或者回滚。死锁检测机制会在...

    ORACLE的工作机制.rar

    3. **并发控制**:Oracle使用多版本并发控制(Multiversion Concurrency Control, MVCC)来实现高并发性。每个事务看到的数据是事务开始时的一致性视图,即使其他事务正在修改数据。这种机制使得读操作无须锁定,写...

    2008年哈尔滨工业大学软件学院Oracle考试题

    9. **并发控制**:学习Oracle的锁定机制,包括行级锁(Row Locks)、表级锁(Table Locks)和多版本并发控制(Multiversion Concurrency Control, MVCC),以及死锁的概念和解决方案。 10. **数据库架构设计**:...

    oracle核心技术读书笔记一附件1

    Oracle采用多版本并发控制(Multiversion Concurrency Control,MVCC)机制来实现高并发。在MVCC中,每个事务看到的数据是该事务开始时的一致性视图,即使其他事务在此期间对数据进行了修改。这种方式避免了读写冲突...

Global site tag (gtag.js) - Google Analytics