🍖多版本并发控制 MVCC 的快照读与当前读简介

什么是多版本并发控制

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

ps : 与MVCC相对的, 是基于锁的并发控制, Lock-Based Concurrency Control

MVCC 的好处

读不加锁, 读写不冲突

在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的RDBMS,都支持了MVCC

快照读与当前读

在 MVCC 并发控制中, 读操作可以的分成两类 : 快照读(snapshot read) 与当前读(current read)

  • 快照读, 读取的是记录的可见版本 (有可能是历史版本),不用加锁
  • 当前读, 读取的是记录的最新版本, 并且返回的记录都会加上锁, 保证其他事务不会再并发修改这条记录

语句示例

在 Innodb 存储引擎中的快照读与当前读示例 :

  • 快照读 : 简单的 select 操作, 属于快照读(也有例外)
select * from [表名] where [条件];
  • 当前读 : 特殊的读操作 : insertupdatedelete 都属于当前读, 需要加锁进行操作
select * from [表名] where [条件] lock in share mode;
select * from [表名] where [条件] for update;
insert into [表名] values(....);
update [表名] set [修改的字段=修改的值] where [条件];
delete from [表名] where [条件];

当前读, 读的都是最新版本记录, 并且加锁防止其他并发的事务对其进行修改, 第一条语句加的是共享锁(S锁), 其余的都是排它锁(X锁)

MVCC的原理分析

https://www.cnblogs.com/linhaifeng/articles/14424181.html

posted @ 2021-03-02 16:20  给你骨质唱疏松  阅读(475)  评论(0编辑  收藏  举报