写点什么

MVCC

作者:周杰伦本人
  • 2022 年 9 月 06 日
    贵州
  • 本文字数:608 字

    阅读完需:约 2 分钟

MVCC

MVCC 是多版本并发控制,是行级锁的变种,但它在很多情况下避免了加锁操作,因此开销更低。读操作非阻塞,写操作只锁定必要的行。MVCC 的实现,是通过保存数据在某个时间点的快照来实现的。不管需要执行多长时间,每个事务看到的数据都是一致的。

Innodb 的 MVCC

Innodb 的 MVCC 是通过在每行记录后面保存两个隐藏的列出现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间。


可重复读隔离级别下的 MVCC 操作:


select:


Innodb 只查找早于当前事务版本的数据行,这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或修改过的。


行的删除版本要么未定义,要么大于当前事务版本号。确保事务读取到的行,在事务开始之前未被删除。


insert:Innodb 为新插入的每一行保存当前系统版本号作为行版本号


delete:Innodb 为删除的每一行保存当前系统版本号作为行删除标识


update:Innodb 为插入一行新记录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。


MVCC 只在 REPEATABLE READ 和 READ COMMITTED 两个隔离级别下工作,其他隔离级别不兼容 MVCC,读未提交总是读取最新的数据行,序列化会对所有读取的行加锁。

优缺点:

优点:保存这两个额外的系统版本号,让读操作不用加锁,提升性能,保证只会读到符合标准的行。


缺点:每行记录都需要额外的存储空间,需要做更多的行检查工作,以及额外的维护。


好了,这就是 MVCC 的大体情况了,如果感觉不错的话,给我点个赞吧😄

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2020.02.29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
MVCC_9月月更_周杰伦本人_InfoQ写作社区