`
san_yun
  • 浏览: 2639642 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

数据库原理之多版本并发控制(MVCC)

 
阅读更多

多版本并发控制

  Multiversion Concurrency Control

  大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并 发控制)。MVCC并不单单应用在MySQL中,其他的数据库如Oracle,PostgreSQL,以及其他数据库也使用这个技术。

  MVCC避免了许多需要加锁的情形以及降低消耗。这取决于它实现的方式,它允许非阻塞读取,在写的操作的时候阻塞必要的记录。

  MVCC保存了某一时刻数据的一个快照。意思就是无论事物运行了多久,它们都能看到一致的数据。也就是说在相同的时间下,不同的事物看相同表的数据是不同的。如果你从来没有这方面的经验,可能说这些有点令人困惑。但是在以后这个会很容易理解和熟悉的。

  每个存储引擎实现MVCC方式都是不同的。有许多种包含了乐观(optimistic)和悲观(pessimistic)的并发控制。我们用简单的InnoDb的行为来举例说明MVCC工作方式。

   InnoDB实现MVCC的方法是,它存储了每一行的两个额外的隐藏字段,这两个隐藏字段分别记录了行的创建的时间和删除的时间。在每个事件发生的时 候,每行存储版本号,而不是存储事件实际发生的时间。每次事物的开始这个版本号都会增加。自记录时间开始,每个事物都会保存记录的系统版本号。依照事物的 版本来检查每行的版本号。在事物隔离级别为可重复读的情况下,来看看怎样应用它。

  SELECT

  InnoDB检查每行,要确定它符合两个标准。

  InnoDB必须知道行的版本号,这个行的版本号至少要和事物版本号一样的老。(也就是是说它的版本号可能少于或者和事物版本号相同)。这个既能确定事物开始之前行是存在的,也能确定事物创建或修改了这行。

  行的删除操作的版本一定是未定义的或者大于事物的版本号。确定了事物开始之前,行没有被删除。

  符合了以上两点。会返回查询结果。

  INSERT

  InnoDB记录了当前新增行的系统版本号。

  DELETE

  InnoDB记录的删除行的系统版本号作为行的删除ID。

  UPDATE

  InnoDB复制了一行。这个新行的版本号使用了系统版本号。它也把系统版本号作为了删除行的版本。

  所有其他记录的结果保存是,从未获得锁的查询。这样它们查询的数据就会尽可能的快。要确定查询行要遵循这些标准。缺点是存储引擎要为每一行存储更多的数据,检查行的时候要做更多的处理以及其他内部的一些操作。

  MVCC只能在可重复读和可提交读的隔离级别下生效。不可提交读不能使用它的原因是不能读取符合事物版本的行版本。它们总是读取最新的行版本。可序列化不能使用MVCC的原因是,它总是要锁定行。

  下面的表说明了在MySQL中不同锁的模式以及并发级别。

锁的策略                    并发性                开销                  引擎
最低 最低 MyISAM,Merge,Memory
NDB Cluster
行和MVCC 最高 最高 InnoDB,Falcon,PBXT,solidD

 

 

 

参考:《high performance mysql 2》

分享到:
评论

相关推荐

    一文教你理解MVCC多版本并发控制

    MVCC(多版本并发控制)是一种用于数据库管理系统和事务内存的并发控制机制,其核心目标是提高并发性能,解决并发读写操作中的数据一致性问题。MVCC通过为每个事务分配唯一的事务标识(如时间戳),使得不同的事务...

    MVCC PostgreSQL实现事务和多版本并发控制的精华1

    PostgreSQL 是一款强大的开源关系型数据库管理系统,它在实现ACID(原子性、一致性、隔离性和持久性)事务特性时,采用了多版本并发控制(MVCC)和Write-Ahead Logging(WAL)技术。MVCC保证了读写操作的并发性,而...

    自考数据库系统原理4375音频同步教程 6.3数据库的并发控制

    3. **多版本并发控制(MVCC, Multiversion Concurrency Control)**:每个事务看到的是一个一致性视图,即事务开始时的数据库状态,不受其他事务的影响。例如,InnoDB存储引擎在MySQL中使用的就是MVCC。 4. **乐观...

    《数据库原理》课后习题及答案.

    《数据库原理》课后的习题涵盖了数据库系统的多个核心领域,包括关系数据库理论、SQL语言、数据库安全性、数据库完整性、数据库设计、查询处理和优化、数据库恢复技术和并发控制。以下是这些章节中的关键知识点: 1...

    数据库原理与应用(第二版)答案

    常见的并发控制机制有锁机制、多版本并发控制(MVCC)和两阶段锁定协议等。 恢复机制则是确保在系统故障后能够恢复到一致状态的关键部分,这通常涉及事务日志和检查点技术。 文件名“数据库原理与应用(第二版)...

    数据库原理 郑州大学的试题

    并发控制技术如锁定、多版本并发控制(MVCC)和乐观锁确保数据的一致性。 6. **恢复机制**:当系统发生故障时,数据库需要有能力恢复到一致状态。日志记录和检查点是实现恢复的关键技术。 7. **数据库设计**:...

    数据库原理 大连理工大学数据库原理课件

    并发控制是处理多个用户同时访问数据库时的问题,常见的并发控制机制有锁定、乐观锁、多版本并发控制(MVCC)等。锁定通过在数据上设置锁来防止冲突,乐观锁假设冲突较少,仅在提交时检查冲突,而MVCC允许读写不阻塞...

    MySQL数据库原理及设计方法.pdf

    总的来说,MySQL数据库原理及设计方法涉及到网络通信、查询优化、并发控制、事务处理等多个层面,理解这些知识对于有效地使用和管理MySQL数据库至关重要。通过合理的设计和配置,可以确保MySQL在高并发环境下提供...

    数据库原理数据库原理.rar

    常见的并发控制技术有封锁、乐观锁、多版本并发控制(MVCC)和两阶段提交等。 9. **数据恢复**:数据库可能会因硬件故障、软件错误或恶意攻击而损坏。数据恢复策略包括备份和恢复、日志记录和检查点等,以确保数据...

    数据库原理及应用第二版习题答案

    常见的并发控制机制有锁定协议(共享锁、排他锁)和多版本并发控制(MVCC)。 7. **安全性与恢复机制**:数据库的安全性涉及权限控制、审计、加密等,确保只有授权用户能访问数据。恢复机制则关注在系统故障或异常...

    数据库原理及其应用教程(第三版)课件PPT

    5. **事务与并发控制**:讲解数据库事务的ACID属性(原子性、一致性、隔离性和持久性),以及并发控制机制,如锁定、多版本并发控制(MVCC)和乐观锁等。 6. **数据库安全性与恢复**:涉及用户权限管理、角色、视图...

    广东工业大学数据库原理与设计试卷

    并发控制技术如锁机制、多版本并发控制(MVCC)和两阶段提交(2PC)等,用于解决并发操作中的冲突和死锁问题。 索引是提高数据库查询性能的关键。学习者需要理解B树、B+树、哈希索引等不同类型的索引结构,以及如何...

    数据库原理答案04735

    常见的并发控制机制有锁定、时间戳、乐观锁和多版本并发控制(MVCC)等。 10. **备份与恢复**:数据库备份是为了防止数据丢失,恢复则是将数据库从错误状态恢复到某一已知的正确状态。常见的备份策略有全量备份、...

    广东工业大学数据库原理课件

    并发控制则是确保多个事务同时执行时数据的一致性,常见的方法有锁定机制、时间戳排序和多版本并发控制(MVCC)。 六、数据库恢复与安全性 数据库恢复技术保证了在系统故障后能恢复到一致状态,通常涉及日志记录和...

    东北大学信息学院数据库原理课件

    常见的并发控制方法有锁定、多版本并发控制(MVCC)和乐观并发控制(OCC)。 备份与恢复是数据库管理的重要方面,用于防止数据丢失。课件可能涵盖全量备份、增量备份和差异备份的策略,以及如何在灾难发生时恢复...

    哈工大数据库原理课件

    课程可能会讲述锁机制、两阶段锁定协议、乐观并发控制和多版本并发控制(MVCC)等策略。 7. 恢复机制:当数据库发生故障时,如何恢复到一致状态是数据库系统必须解决的问题。这包括日志记录、检查点、前滚和后滚等...

    并发控制指的是当多个用户同时更新行时,用于保护数据库完整性的各种技术。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。

    Oracle数据库系统使用了自己的并发控制机制,包括行级锁定、多版本并发控制(MVCC)等,以支持高并发性能的同时保持数据一致性。MVCC允许事务查看数据的历史版本,从而减少锁定冲突,提高系统吞吐量。 总结来说,...

    数据库原理、编程与性能

    事务处理保证了数据的一致性和完整性,而并发控制机制如锁和多版本并发控制(MVCC)则确保了多个用户同时访问数据库时的正确性。 此外,数据库设计也是不容忽视的部分。正常化是将数据结构分解为最小的、不重复的...

Global site tag (gtag.js) - Google Analytics