1.概述:
  定义:Multiversion concurrency control, is a concurrency control method commonly used by database management systems to provide concurrent access to the database and in programming languages to implement transactional memory.

  MVCC,即多版本并发控制技术,可以使支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是,把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,提高数据库系统的并发性能.

  MVCC是一种乐观锁的实现

  MVCC已广泛应用于Oracle、MySQL InnoDB、MS SQL Server 2005+、Postgresql、Firebird、Maria

2.原理:
  原来,为了实现mvcc,innodb对每一行都加上了两个隐含的列,其中一列存储行被更新的”时间”,另外一列存储行被删除的”时间”

  这里,innodb存储的并不是绝对的时间,而是与时间对应的数据库系统的版本号,每当一个事务开始的时候,innodb都会给这个事务分配一个递增的版本号,所以版本号也可以被认为是事务号。对于每一个”查询”语句,innodb都会把这个查询语句的版本号同这个查询语句遇到的行的版本号进行对比,然后结合不同的事务隔离等级,来决定是否返回该行

3.细节:
  1) SELECT--对于select语句,只有同时满足了下面两个条件的行,才能被返回:
    •行的被修改版本号小于或者等于该事务号
    •行的被删除版本号要么没有被定义,要么大于事务的版本号:行的删除版本号如果没有被定义,说明该行没有被删除过;如果删除版本号大于当前事务的事务号,说明该行是被该事务后面启动的事务删除的,由于是repeatable read隔离等级,后开始的事务对数据的影响不应该被先开始的事务看见,所以该行应该被返回

  2) INSERT--对新插入的行,行的更新版本被修改为该事务的事务号

  3) DELETE--对于删除,innodb直接把该行的被删除版本号设置为当前的事务号,相当于标记为删除,而不是实际删除

  4) UPDATE--在更新行的时候,innodb会把原来的行复制一份到回滚段中,并把当前的事务号作为该行的更新版本

4.优缺点

  优点:不用获得锁,通过版本实现

  缺点:需要维护版本信息;检索时需要版本比较

5.INNODB支持的事务隔离等级:MVCC由于其实现原理,只支持read committed和repeatable read隔离等级

  INNODB支持并实现了ISO标准的4个事务隔离等级,即 READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.

  1. READ UNCOMMITTED (可以读未提交的): 查询可以读取到其他事务正在修改的数据,即使其他事务的修改还没有提交.这种隔离等级无法避免脏读.
  2. READ COMMITTED(只可以读已经提交的):其他事务对数据库的修改,只要已经提交,其修改的结果就是可见的,与这两个事务开始的先后顺序无关.这种隔离等级避免了脏读,但是无法实现可重复读,甚至有可能产生幻读.
  3. REPEATABLE READ(可重复读):比read committed更进了一步,它只能读取在它开始之前已经提交的事务对数据库的修改,在它开始以后,所有其他事务对数据库的修改对它来说均不可见.从而实现了可重复读,但是仍有可能幻读
  4. SERIALIZABLE(可串行化):这是事务隔离等级的最高级别.其实现原理就是对于所有的query,即使是查询,也会加上读锁,避免其他事务对数据的修改.所以它成功的避免了幻读.但是代价是,数据库系统的并发处理能力大大降低,所以它不会被用到生产系统中.

参考:

http://donghui.blog.51cto.com/2709336/692586

转载于:https://www.cnblogs.com/ppp21spider/p/5230433.html

并发控制:(三)MVCC 多版本并发控制相关推荐

  1. MYSQL专题-MVCC多版本并发控制

    MVCC,全称Multi-Version Concurrency Control,即多版本并发控制.MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内 ...

  2. 【SQL】MVCC 多版本并发控制

    MVCC多版本并发控制 快照读与当前读 隔离级别 隐藏字段,undo log 版本链 隐藏字段trx_id 版本链 read view 举例说明 read committed(读已提交)隔离级别下 r ...

  3. 【MVCC多版本并发控制】MVCC 机制的原理及实现,什么是MVCC,多版本并发控制

    什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL.Oracle.PostgreSQL 等)引擎 ...

  4. MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)

    文章目录 一.MVCC概念 二.MVCC应用于已提交读隔离级别 1. 解决脏读 2. 无法解决不可重复读 3. 无法解决幻读 三.MVCC应用于可重复读隔离级别 1. 解决脏读 2. 解决不可重复读 ...

  5. MySQL 高级 —— MVCC 多版本并发控制

    引言 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁.基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制--MVCC.包括其他数据库如Oracle等,由于MVCC并没有一个统一的实现 ...

  6. MySQL数据库MVCC多版本并发控制简介

          MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是 ...

  7. 【MySQL】MVCC多版本并发控制(重点:MVCC实现原理之ReadView)

    [大家好,我是爱干饭的猿,本文重点介绍MySQL的MVCC概念.快照读与当前读.MVCC实现原理之ReadView.隐藏字段.Undo Log版本链. 后续会继续分享MySQL和其他重要知识点总结,如 ...

  8. MySQL第一讲 一遍让你彻底掌握MVCC多版本并发控制机制原理

    Mysql在可重复读隔离级别下,同样的sql查询语句在一个事务里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果.这个隔离性就是靠MVCC(Multi-Versio ...

  9. fetch first mysql_MySQL多版本并发控制机制(MVCC)源码浅析

    MySQL多版本并发控制机制(MVCC)-源码浅析 前言 作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾.<>诚然讲的非常透彻,但只能提纲挈领,不能让 ...

最新文章

  1. 最强 Java Redis 客户端
  2. Linux下安装软件的一般步骤
  3. C# JSON使用过程中开发的小工具
  4. 【白话机器学习】算法理论+实战之PageRank算法
  5. 请解释一下Java多线程回调是什么意思?
  6. 速递|2021双11阿里云数据库技术快报
  7. “睡服”面试官系列第五篇之proxy(建议收藏学习)
  8. BugkuCTF-Crypto题你喜欢下棋吗
  9. MySQLi学习笔记 :二(  排序查询,聚合函数,分组查询,分页查询) 约束     多表之间的关系   范式     数据库的备份和还原
  10. ecshop二次开发之模板整合
  11. SLA、BFD、NQA、ACl 笔记
  12. java游戏 麦克斯 狗,我的主角麦克斯----记南极大冒险中的狗狗们
  13. 惠普179fnw打印机使用说明_惠普HP Color Laser MFP 179fnw 一体打印机驱动下载
  14. flappy bird用java实现_java实现Flappy Bird游戏源代码
  15. 软件测试工程师市场需求量是多少,带你探索软件测试工程师月薪是多少
  16. 陷波滤波器——周期性降噪
  17. “遛狗不牵绳-违法”--遛狗不牵绳识别检测 助力智慧城市犬类管理
  18. 数学小课堂:数学思维(从逻辑出发想问题)
  19. 语音信号处理--基音检测实验
  20. 步进电机的抖动和噪音从何而来 如何使步进电机完全静音

热门文章

  1. 公司-弹出页回调之后加载页面
  2. php功能与特性,PHP 6将实现的8个特性和功能
  3. mysql 8.0什么时候发布_MySQL 8.0.22正式发布
  4. 更大的工字型电感作为150kHz导航信号接收天线
  5. 对于150kHz导航信号放大检波天线保护电路
  6. 第十一届全国大学生智能汽车竞赛获奖名单
  7. 一种简易实现磁悬浮吊坠方案
  8. 基于Manim针对FT教学过程的一种可行性设计
  9. 苹果系统怎么降低版本_1903、1809...到底怎么看系统版本?
  10. PHP框架半透明,CSS设定一个元素半透明