【MySQL】一篇讲透MySQL的MVCC机制!
MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库管理系统中用于处理并发访问的一种机制,尤其在 InnoDB 等存储引擎中被广泛使用。
它通过保存数据的多个版本,让不同事务在并发读写时能够互不干扰,既保证了事务隔离性,又减少了锁竞争,提升了数据库的并发性能。
三个核心组件:隐藏字段、undolog版本链、Read View
核心原理
每个事务读到的 不是正在被修改的数据,而是自己对应的历史版本快照,所以多个事务既能同时读,又能同时写,读写互不阻塞,保证了数据库高并发。
关键机制
Undo Log版本链 维护了数据之前的版本。
那么当前事务到底能看到版本链的哪一条数据呢?
就要靠ReadView
会记下哪个数据已经提交,哪些还活跃,然后按照一套规则判断这个版本能不能看。
隔离级别下的区别
RC读已提交:每次Select都会生成一个新的ReadView,所以前后两次Select结果可能不一样,造成不可重复读问题。
RR可重复读:只在第一次Select时生成一个ReadView,后面一直复用这个ReadView,所以每次读到的数据都是一样的,这就是可重复读。
总结:
MVCC是快照读
Undo Log是历史版本的支撑
ReadView决定谁能看见哪个版本的数据