mvcc解决了读写中加锁的性能开销,但是只适用于在读已提交和可重复读两个隔离级别下。mvcc基于undo日志和Read View来实现

  • undo日志:每次执行操作,不论是否提交,都会生成一个日志用来当前的操作
  • read view:当前sql应该查询的事务id,分为未提交,和已提交两部分。在读已提交下,每一次select都会重新生成,在可重复读下,只有第一次会生成,之后会使用第一次生成的数据

mysql默认会给数据表增加两个字段,trx id(当前事务id),roll pointer(回滚指针)

  • trx id:每次执行操作,都会生成一个事务id
  • roll pointer:用来指向上一个事务的位置

当执行查询sql时会生成一致性视图read-view,它由查询时所有未提交的事务id数组(数组里最小的min_id)和已创建的最大事务id(max_id),组成,查询的数据结果根read-view做比对从而获得快照效果

文章摘要
https://www.bilibili.com/video/BV1YJ411J7vb?from=search&seid=11408281247891560503

Categories: mysql

0 Comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注