美文网首页
数据库之MVCC

数据库之MVCC

作者: Catcher07 | 来源:发表于2018-07-20 22:25 被阅读0次

一、概念

MVCC (Multiversion Concurrency Control),即多版本并发控制技术。它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,而是将行锁和行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。

1. MVCC解决了什么问题

  • MVCC实现了MySQL中第三事务隔离级别,可重复读
  • 锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销。

2. MVCC的实现原理

MVCC是保存数据在某个时间点的快照实现的。不同存储引擎的MVCC实现是不同的,典型的有乐观并发控制和悲观并发控制。、

Innodb MVCC主要是为Repeatable-Read事务隔离级别做的。在此隔离级别下,A、B客户端所示的数据相互隔离,互相更新不可见

3. MVCC的具体实现

以MySQL中InnoDB数据库引擎为例,讲述MVCC是怎样进行并发控制的。

  • InnoDB的MVCC是通过在数据库表的后面加入两个隐藏列来实现的。分别保存了这个行的创建时间,一个保存的是行的删除时间。开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID.
  • 具体的演示的例子可参考博客
    https://blog.csdn.net/whoamiyang/article/details/51901888

4. MVCC在执行select、delete、 insert、 update的过程

SELECT
Innodb检查每行数据,确保他们符合两个标准:

  1. InnoDB只查找版本早于当前事务版本的数据行(也就是数据行的版本必须小于等于事务的版本),这确保当前事务读取的行都是事务之前已经存在的,或者是由当前事务创建或修改的行
  2. 行的删除操作的版本一定是未定义的或者大于当前事务的版本号,确定了当前事务开始之前,行没有被删除。

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

INSERT
InnoDB为每个新增行记录当前系统版本号作为创建ID。

DELETE
InnoDB为每个删除行的记录当前系统版本号作为行的删除ID。

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

二、MVCC的总结

一般我们认为MVCC有下面几个特点:
每行数据都存在一个版本,每次数据更新时都更新该版本
修改时Copy出当前版本随意修改,各个事务之间无干扰
保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃copy(rollback)
就是每行都有版本号,保存时根据版本号决定是否成功,听起来含有乐观锁的味道,而Innodb的实现方式是:
事务以排他锁的形式修改原始数据
把修改前的数据存放于undo log,通过回滚指针与主数据关联
修改成功(commit)啥都不做,失败则恢复undo log中的数据(rollback)
二者最本质的区别是,当修改数据时是否要排他锁定,

参考

https://blog.csdn.net/whoamiyang/article/details/51901888
https://www.cnblogs.com/chenpingzhao/p/5065316.html
https://blog.csdn.net/chen77716/article/details/6742128
可能的疑问
https://segmentfault.com/q/1010000002392124
更新时旧数据是否删除的答案
https://blog.csdn.net/phantomes/article/details/46425175
简短的总结
https://www.cnblogs.com/dongqingswt/p/3460440.html

相关文章

  • InnoDB MVCC思路

    MVCC MVCC即多版本并发控制。数据库的事务型存储引擎基于提升并发性能的实现会使用MVCC。 MVCC的实现,...

  • 数据库之MVCC

    一、概念 MVCC (Multiversion Concurrency Control),即多版本并发控制技术。它...

  • 一文理解Mysql MVCC

    MVCC 就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。 为...

  • MVCC 隔离级别 视图

    MVCC Mysql/Oracle等数据库 均实现了MVCC(多版本并发控制),但各自的实现机制不尽相同。 Mys...

  • 数据库MVCC, since 2022-04-26

    (2022.04.26 Tues)数据库的MVCC,multi-version concurrency contr...

  • 值得收藏,揭秘 MySQL 多版本并发控制实现原理

    MySQL 中多版本并发控制(MVCC),是现代数据库引擎实现中常用的处理读写冲突的手段,MVCC 作为 MySQ...

  • 你真的懂MVCC吗?来手动实践一下?

    MVCC 是什么? 01 数据库并发控制——锁 Multiversion (version) concurrenc...

  • mysql-mvcc

    mysql-mvcc MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读...

  • mvcc原理

    MVCC mvcc 指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引...

  • Mvcc 学习笔记

    MVCC 笔记 MVCC为了解决什么问题? 多版本并发控制,针对在并发访问数据库时对于数据版本的控制以及隔离性问题...

网友评论

      本文标题:数据库之MVCC

      本文链接:https://www.haomeiwen.com/subject/kbhcmftx.html