`
hekuilove
  • 浏览: 156387 次
  • 性别: 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模式各不相同,典型有乐观和悲观并发控制。 innodb 说明: InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保

    12 多版本并发控制原理(MVCC).pdf

    12 多版本并发控制原理(MVCC).pdf

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

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

    MySQL中大对象的多版本并发控制详解

    在本文中,我将解释MySQL InnoDB存储引擎中大对象(LOB)设计的多版本并发控制(MVCC) 。 MySQL 8.0有一个新功能,允许用户部分更新大型对象,包括JSON文档 。 使用此部分更新功能,当LOB部分更新时,MVCC对LOB的...

    InnoDB中的MVCC

    MVCC即Multi-Version Concurrency Control,译为多版本并发控制。 MVCC的背景 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。 不仅是...

    mysql进阶版笔记总结

    事务和并发控制:MySQL支持ACID特性的事务,并提供了各种并发控制机制,如行级锁定、多版本并发控制(MVCC)等,确保数据的一致性和并发性。 安全性和权限管理:MySQL提供了强大的安全功能,包括用户认证、访问

    mysql专题.rar

    MySQL面试题讲解以及流程图 mvcc多版本并发控制

    Java面试系列-MySQL

    MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。 已提交读隔离级别下的事务在每次查询的...

    深入理解PostgreSQL的MVCC并发处理方式

    Postgres通过一个叫做 多版本并发控制(MVCC) 的机制做到了这一点。这个技术并不是Postgres所特有的:还有好几种数据库都实现了不同形式的MVCC,包括 Oracle、Berkeley DB、CouchDB 等等 。当你使用PostgreSQL来设计...

    MySQL进阶学习-笔记整理

    适合对mysql有一定基础的...2.2、MVCC多版本并发控制机制 3、Mysql日志 3.1、总体架构 3.2、INNODB日志 4、全局优化 4.1、全局参数配置 5、8.0新特性 5.1、Mysql8.0.17新特性 6、安装集群 6.1、单机版本 6.2、主从复制

    InnoDB引擎MVCC实现原理.pptx

    InnoDB引擎MVCC实现原理

    Mysql innodb 存储引擎全揭秘

    Innodb 通过多版本并发控制(MVCC)来获得高并发性,并且实现了sql标准的4种隔离级别,默认为repeatable_read 级别。同时使用一种 -- next-key locking 的锁策略来避免幻读现象的产生,还提供了插入缓冲(insert ...

    MySQL高级理论-MVCC提交查询相关(版本链)

    1. MVCC(Multi-Version Concurren):多版本并发控制,是MySQL的事务型存储引擎如InnoDB。 2. trx_id与roll_pointer:MySQL会给每个表加2个字段,trx_id是事务字段id,roll_pointer为回滚字段。 3. 事务会有一个ID,...

    MySQL之锁和事务

    目录一、锁分类死锁二、事务事务特性隔离级别多版本并发控制MVCC 一、锁 分类 Mysql为了解决并发、数据安全的问题,使用了锁机制。可以按照锁的粒度把数据库锁分为表级锁和行级锁。 表级锁 对当前操作的整张表加锁,...

    大厂2022mysql面试题汇总

    MVCC 是多版本并发控制,在很多情况下避免加锁,⼤都实现了⾮阻塞的读操作,写操作也只锁定必要的⾏。 InnoDB 的MVCC 通过在每⾏记录后⾯保存两个隐藏的列来实现,这两个列⼀个保存了⾏的创建时间,⼀个保存⾏的过期...

    详解MySQL是如何解决幻读的

    1. 多版本并发控制(MVCC)(快照读) 多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。 以 InnoDB 为例,每一行中都冗余了两个字断。一个是行的创建版本,一个是行的删除(过期)版本。版本号...

    MySql整理(基础进阶运维).docx

    基础篇,通用语法及分类,DDL(数据定义语言),DML(数据操作...InoDB引擎,逻辑存储结构,架构,事务的原理,MVCC(多版本并发控制),MYSQL管理,系统数据库,常用工具,mysql,mysqladmin,mysqlbinlog,mysqlshow,mysqldump,运维

    MySQL是如何解决幻读的

    先看这篇博文讲的是事务特征、事务隔离级别,...1. 多版本并发控制(MVCC)(快照读) 多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。 以 InnoDB 为例,每一行中都冗余了两个字段。一个是行的创

Global site tag (gtag.js) - Google Analytics