`
andy136566
  • 浏览: 290590 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MYSQL 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
分享到:
评论

相关推荐

    MySQL的锁机制解析

    MySQL的锁机制是数据库管理系统中用于控制并发操作的重要机制,对于保证数据的一致性和完整性起着至关重要的作用。本文将深入解析MySQL中的锁机制,帮助读者理解其工作原理,为面试准备或日常数据库管理提供有力支持...

    MySQL存储引擎及其面向的数据库应用[收集].pdf

    以下是几种常见的MySQL存储引擎及其特点: 1. **InnoDB存储引擎**: - **事务支持**:InnoDB是支持ACID(原子性、一致性、隔离性、持久性)事务的存储引擎,适合在线事务处理(OLTP)应用。 - **行级锁定**:它...

    【课堂笔记】MySQL事务与锁详解.pdf

    InnoDB通过MVCC实现了事务的隔离性,确保在不同事务中可以同时读取同一行数据的不同版本。 8. 事务并发导致的问题及其解决方案: 事务并发可能会导致数据的脏读、不可重复读和幻读等问题。解决方案通常包括: - ...

    MySQL5 权威指南(中文第三版)_高清扫描_完整目录_pdf

    6. **事务与并发控制**:阐述事务的概念、ACID属性,以及MySQL中的事务隔离级别和并发控制机制,如锁定和MVCC(多版本并发控制)。 7. **备份与恢复**:介绍如何进行MySQL的备份,包括物理备份和逻辑备份,以及在...

    03-MySQL数据库源码

    MySQL使用MVCC(多版本并发控制)来实现并发读写,保证数据一致性。InnoDB的源码中,如`row0trx.h`和`row0undo.cc`,详细描述了事务提交、回滚和行版本管理。 5. 锁机制 MySQL支持表级锁、行级锁和意向锁等多种锁...

    Mysql面试题总结大全

    5、MySQL 的锁机制 6、数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 彻底理解数据库事务 7、悲观锁:假定会发生并发冲突,屏蔽一切可能违反...

    mysql笔记.zip

    3. 并发控制:死锁的概念及处理,以及InnoDB存储引擎的MVCC(多版本并发控制)机制。 五、存储引擎 1. 存储引擎对比:InnoDB(默认引擎,支持事务处理)与MyISAM(非事务处理,读写速度快)的区别。 2. 其他引擎:...

    MySQL面试题-20道经典面试题详解汇总(很详细).pdf

    - MVCC是一种并发控制机制,用于提高读写性能。它通过保留数据的不同版本来实现。 - **一致性视图**:每个事务开始时都会创建一个视图,决定能看到哪些数据版本。 - **undo log**:存储事务回滚信息,用于恢复旧...

    30道大厂常问的MySQL面试题.docx

    本资源提供了 20 个 MySQL 面试题及其答案,涵盖了 MySQL 的基础知识、索引、事务、 SQL 注入、数据库设计、存储引擎、查询优化、事务隔离级别、视图、事务日志、锁机制、备份和恢复、慢查询优化、复制等方面。...

    MySQL存储引擎简介

    InnoDB则提供了更为复杂的行级锁定机制和MVCC(多版本并发控制),以优化并发事务性能。在索引方面,虽然两种存储引擎都支持B树索引,但InnoDB还支持数据缓存和索引缓存,这增强了数据访问的速度和效率。 选择合适...

    MySQL性能调优与架构设计

    4. 并发控制:MySQL的事务处理和并发控制机制(如MVCC、锁机制)也是调优的重点,书中会详细解析如何平衡并发性和数据一致性。 二、架构设计 1. 分区与分片:随着数据量的增长,分区和分片成为必要的架构扩展手段...

    周阳MySQL高级脑图.zip

    4. **事务与并发控制**:MySQL支持ACID(原子性、一致性、隔离性、持久性)特性,其InnoDB引擎使用MVCC(多版本并发控制)实现事务的并发执行。深入理解隔离级别(读未提交、读已提交、可重复读、串行化)及其对并发...

    mysql cookbook 2nd chm

    4. **事务与并发控制**:针对需要确保数据一致性的应用,书中详细阐述了MySQL的事务处理机制,包括ACID属性和隔离级别,以及并发控制策略如锁和MVCC。 5. **备份与恢复**:数据库的安全性和可用性是关键。本书详细...

    精心为你准备的最全的20道Mysql面试题

    总结来说,理解MySQL的事务特性和MVCC机制对于数据库管理员和开发人员来说是至关重要的,它们是保证数据安全和性能的基础。在面试中能够深入分析这些概念,不仅展示出对数据库理论的掌握,还能体现出解决实际问题的...

    Mysql 进阶修行学习

    MySQL的存储引擎是其核心组成部分之一,不同的存储引擎提供了不同的存储机制、索引技术和数据处理能力。 1. **体系结构** - 存储引擎是MySQL的核心组件,负责处理数据的存储与检索。 - MySQL支持多种存储引擎,...

    MySQL性能调优与架构设计(带目录).zip

    - 锁机制:分析不同类型的锁(如行级锁、表级锁、MVCC)及其应用场景。 - 并发控制:讲解并发环境下如何处理死锁,优化InnoDB的事务并发能力。 - 性能监控与分析:利用工具(如pt-query-digest、MySQL慢查询日志...

Global site tag (gtag.js) - Google Analytics