共计 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 [条件];
- 当前读 : 特殊的读操作 :
insert
、update
、delete
都属于当前读, 需要加锁进行操作
select * from [表名] where [条件] lock in share mode;
select * from [表名] where [条件] for update;
insert into [表名] values(....);
update [表名] set [修改的字段 = 修改的值] where [条件];
delete from [表名] where [条件];
当前读, 读的都是最新版本记录, 并且加锁防止其他并发的事务对其进行修改, 第一条语句加的是共享锁 (S 锁), 其余的都是排它锁 (X 锁)
MVCC 的原理分析
正文完