浅析MVCC中的快照,看看快照是怎么工作的?

文 / @WordPress主题

在MySQL中, MVCC(多版本并发控制)是InnoDB存储引擎的实现方式之一,它通过快照来控制并发事务之间的相互影响。每次事务更新数据时,InnoDB会生成一个新的数据版本,并在该版本上记录该事务的ID。同时,旧版本的数据也被保留下来,以便在需要时可以直接获取到它。

当一个新事务开始时,它会根据自己的事务ID创建一个“快照”,这个快照会记录此时系统中活跃的所有事务。根据可重复读的定义,只有已提交的事务结果可以被新事务看到。不过,如果一个事务启动后,其他事务进行了更新操作,那么这些更新操作对该事务是不可见的。如果一个事务只看自己之前已经提交的事务结果,那么就可以使用快照来实现。

快照将所有的rowtrx_id分成了三种情况:已提交和当前事务自己生成的版本是可见的;将来启动的事务生成的版本是不可见的;当前还未提交的事务生成的版本要等到提交后才能看到。

举个例子,假设有三个活跃事务,ID分别是909395,现在一个新事务A开始读取数据,如果读到的版本ID是104,那么这个版本是由将来启动的事务生成的,是不可见的;如果是88,那么这个版本是已经提交或者是当前事务自己生成的,是可见的;如果是94,那么这个版本已经提交,但是是在事务A创建快照之后提交的,是不可见的;如果是93,那么这个版本是未提交的事务生成的,是不可见的。

总之,快照在MVCC中起到了至关重要的作用,它能够确保事务之间能够互相隔离,不会相互影响。在实际使用中,我们需要深入了解其实现原理,以确保数据库的可靠性和高效性。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。