`
hekuilove
  • 浏览: 158198 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

MySQL之多版本并发控制(MVCC)

阅读更多
在程序员的思维里,并发控制永远都是值得讨论的话题。这里我就不过多的去讲解并发控制的基本概念了

●基本概念
MVCC:Multi-Version Concurrency Control 多版本并发控制。笔者用自己的话对MVCC做一个总结:通过某个时间点上的数据快照对数据的版本控制,目的是为了避免使用各种锁影响并发性能

●MySQL锁机制
说到锁,MySQL里提供了几种锁机制
读写锁
表锁
行级锁

笔者不来一一解释这几种锁的基本概念了,百度谷歌应该会有不少。笔者这里需要说一点,不管使用了什么锁,锁的方式都是隐式锁定的,不需要手动去做任何事情。因为笔者曾经和人讨论MySQL锁机制的时候曾有人提出使用for update的方式锁定。这种方式实际为MySQL显示锁定,MySQL的文档里有说明此方法并不推荐使用的。实际上也并不需要使用,原因上面已经讲过了。所有的锁都是隐式锁定的
MySQL提供了两种显示锁定的方式
select *  for update
select * lock in share mode

程序员们千万记住,以上的语句完全没有必要,不仅如此,还会极为浪费性能。实际上InnoDB的行级锁已经完全处理OK了

●MVCC控制
基于性能考虑,实际MySQL大多的事务型存储引擎的实现都不是简单的行级锁,而是大量的使用了MVCC。
MVCC的实现,是通过数据保存数据在某个时间点的快照来实现的。也就是说,不管需要执行多长时间,每个事务看到的数据都是一致的。根据食物开始时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。

不同的存储引擎的MVCC的实现方式是不同的,最典型的有乐观并发控制和悲观并发控制。

InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,一个保存了行的创建版本号,一个保存了行的过期版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事物的版本号,用来和查询到的每行记录的版本号进行比较。

下面看一下REPEATABLE READ隔离级别下,MVCC具体是如何操作的

SELECT
       InnoDB 会根据一下两个条件检查每行记录
       a. InnoDB至查找版本早于当前事务版本的数据行,这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的。
       b.行的删除版本要么未定义,要么大于当前事务版本号。这个可以确保事务读取到的行,在事务开始之前未被删除
     只有符合以上两个条件的记录,才能返回作为查询结果

INSERT
     InnoDB为新插入的每一行保存当前系统版本号作为行版本号

DELETE
     InnoDB为删除的每一行保存当前系统版本号作为行删除标识。

UPDATE
     InnoDB为插入一行新纪录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。
0
0
分享到:
评论

相关推荐

    MYSQL数据库多版本并发控制(MVCC)

    MYSQL数据库多版本并发控制(MVCC) MYSQL数据库的多版本并发控制(MVCC)是一种提高并发的技术。MVCC的出现使得MySQL数据库的并发度大幅度提高。MVCC的实现依赖于隐藏字段、undo log日志、read view等机制。 1. ...

    mysql多版本并发控制MVCC的实现

    事务隔离级别设置 ...不同数据库引擎MVCC模式各不相同,典型有乐观和悲观并发控制。 innodb 说明: InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保

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

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

    mysql 8.0.22.0 下载安装配置方法图文教程

    mysql 8.0.22 下载安装配置方法,供大家参考,具体内容如下 1、进入MySQL官网下载,或... 您可能感兴趣的文章:mysql多版本并发控制MVCC的实现关于Mysql隔离级别、锁与MVCC介绍SpringBoot中通过实现WebMvcConfigurer参数

    MySQL的数据库系统并发控制及自优化研究

    此外,InnoDB还采用了MVCC(多版本并发控制)技术,允许读取操作在不加锁的情况下进行,从而减少了锁定冲突,提高了并发性能。死锁检测机制则能在发现循环等待时自动解除死锁,避免系统停滞。 自优化是MySQL数据库...

    MySQL数据库对并发事件的控制和处理.pdf

    MySQL通过事务处理、锁定机制、多版本并发控制(MVCC)以及死锁检测等策略来应对并发事件。事务是数据库操作的基本单元,它提供了原子性、一致性、隔离性和持久性的保证。在MySQL中,事务可以通过`START TRANSACTION...

    MySQL的并发控制与加锁分析1

    MySQL的并发控制与加锁分析主要集中在InnoDB存储引擎中,因为InnoDB支持多版本并发控制(MVCC),这是为了提高数据库并发性能而设计的一种机制。MVCC避免了读写冲突,使得读操作无需锁定记录,提升了系统的吞吐量。 ...

    mysql并发控制原理知识点

    MySQL并发控制原理是数据库系统中不可或缺的部分,它确保在多用户环境下数据的一致性和完整性。在高并发场景下,数据库必须有效地处理多个事务同时访问相同数据的情况,避免数据的不一致性和丢失更新等问题。以下是...

    面试官:什么是MySQL 事务与 MVCC 原理?.doc

    本文主要讲解了 MySQL 中的事务(Transaction)和多版本并发控制(MVCC)原理。事务是指数据库中的一系列操作,是不可分割的,要么全部执行成功,要么全部失败,不允许出现中间状态的数据。事务有四个特性:原子性、...

    11 并发访问控制_theory_MYSQL_

    - 多版本并发控制(MVCC):MySQL的InnoDB存储引擎使用MVCC实现读已提交(Read Committed)和可重复读(Repeatable Read)隔离级别。 - 乐观锁:假设冲突很少,只在事务提交时检查冲突,如基于版本号的乐观锁。 4...

    MySQL-acid-mvcc以及=事物隔离级别

    此外, MySQL的事务存储引擎InnoDB使用多版本并发控制(MVCC)技术,以便应对更高的并发,当然是以消耗性能作为代价。MVCC的实现方式是,每一行数据都存储了两个额外的隐藏字段,分别记录了行的创建时间和删除时间。...

    InnoDB引擎MVCC实现原理.pptx

    InnoDB 引擎的 MVCC(Multi-Version Concurrency Control,多版本并发控制)机制是 MySQL 中的一种事务控制机制,它允许在高并发环境中实现高效、安全的数据访问。MVCC 机制的核心是实现了事务之间的并发控制,避免...

    MySQL中如何处理并发写入问题?

    MVCC 机制可以避免了并发写入冲突,因为每个事务都可以看到自己的版本数据,而不是其他事务的版本数据。这样可以避免了数据的一致性和完整性问题。 MySQL 提供了多种机制来处理并发写入问题,例如事务、锁、乐观锁...

    MYSQL基础知识——逻辑结构、并发控制、事务、多版本控制和存储引擎

    MySQL是世界上最流行的关系型数据库管理系统之一,其设计和功能涵盖了多个关键领域,包括逻辑结构、并发控制、事务处理以及存储引擎。以下是对这些概念的详细解释: **逻辑结构**: MySQL的逻辑结构分为三层。第一...

Global site tag (gtag.js) - Google Analytics