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

326次阅读
没有评论

共计 798 个字符,预计需要花费 2 分钟才能阅读完成。

什么是多版本并发控制

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

正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计798字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)