1.4. 多版本并发控制

未匹配的标注
  • MVCC:可以认为是行级锁的变种,避免加锁的情况下实现了非阻塞读操作,写操作也只锁定必要的行。通过保存数据在某个时间点的快照进行实现。各个事务看到的数据始终保持一致。

  • 类型:乐观MVCC、悲观MVCC。

Id Name Sex Age CreateSVN DeleteSVN
1 canaan 1 23 1 2
2 canaan 1 24 2
  • InnoDB MVCC实现方式:每行记录后保存创建、删除时系统版本号(SVN)即事务版本号,用来和当前事务进行比较,以判断当前事务对此记录是否可见。 currentSVN >= CreateSVN and current < deleteSVN 即可见。

  • Insert操作设置CreateSVN、Delete操作设置DeleteSVN。Update操作新写入一行设置CreateSVN为当前事务版本号后,设置之前行DeleteSVM为当前事务版本号。(猜想:应为原子操作,不为原子操作会出现后面事务从一行读到多行的情况,虽然可能很短暂。)

  • 优缺点:优点时大多数读操作不用加锁,缺点是每行记录都需要额外的存储空间,需要更多的检查维护。

  • MVCC只在可重复读和提交读下工作,其它两个隔离级别和MVCC不兼容。未提交读总是读取最新行而不是事务角度下的数据,串行化会对所有行加锁。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
canaan_wang
讨论数量: 0
发起讨论 只看当前版本


暂无话题~