Mysql MVCC的总结

251 阅读1分钟

MVCC(Mutil-Version Concurrency Control)

  • 全称是多版本并发控制
  • 目的在于提高数据库高并发场景下的吞吐性能

为什么需要MVCC

并发事务处理代理啊一些问题:

  • 更新丢失
  • 脏读
  • 不可重复读
  • 幻读

后三者需要数据库提供事务间的隔离机制来解决

方法:

  • 加读写锁
  • 一致性快照读,即MVCC

基本特征

  • 每行数据都存在一个版本,每次数据更新时都更新该版本。
  • 修改时Copy出当前版本随意修改,各个事务之间无干扰。
  • 保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃copy(rollback)

ReadView

  • 已提交读-每次查询的开始都会生成一个独立的ReadView
  • 可重复读- 在第一次读的时候生成一个ReadView,之后的读都复用之前的ReadView

关于Mysql中MVCC的总结

客观上,我们认为他就是乐观锁的一整实现方式,就是每行都有版本号,保存时根据版本号决定是否成功。但由于Mysql的写操作会加排他锁,如果锁定了还算不算是MVCC?了解乐观锁的小伙伴们,都知道其主要依靠版本控制,即消除锁定,二者相互矛盾,so从某种意义上来说,Mysql的MVCC并非真正的MVCC,他只是借用MVCC的名号实现了读的非阻塞而已。