MVCC 是怎么让查询少加锁的

102次阅读
没有评论

MVCC 的核心思路不是把所有读写都锁住,而是让读取尽量去看一个自己应该看到的历史版本,从而减少读写冲突。

它为什么能少加锁

因为更新数据时,数据库不会只留下最新值,还会把旧版本通过版本链保留下来。普通查询不必总去抢当前正在修改的那一版。

读取时靠什么判断该看哪个版本

关键在一致性视图,也就是常说的 Read View。查询会根据事务可见性规则,从版本链里挑出当前事务应该看到的那一版数据。

它解决了什么问题

主要是缓和读写冲突。普通 select 不必动不动阻塞写入,写入也不必总把普通读取全部卡住,所以并发性能更好。

它不是万能替代锁

当你执行 updatedeleteselect ... for update 时,还是要配合当前读和锁机制。MVCC 重点解决的是快照读,不是把所有并发问题都消灭掉。

一句话理解

MVCC 让数据库在很多读场景下不用硬碰硬抢锁,而是通过多版本把“该你看到哪一版”这件事处理掉。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-03-29发表,共计389字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)