MySQL中MVCC的readview是如何处理当前事务对其他事务的可见与不可见的?
在MySQL中,MVCC(多版本并发控制)是一种处理并发事务的机制。它通过创建“读视图”来处理当前事务对其他事务的可见性。
读视图是当前事务在开始时创建的一个快照,它记录了当前事务开始时间点时数据库中的数据状态。当其他事务对数据库进行修改时,它们会创建自己的写版本,并在修改时记录版本号。读视图会根据当前事务开始时间点之前的所有已提交事务的写版本号来判断当前事务对这些事务的可见性。
具体处理过程如下:
-
当事务A开始时,系统会为事务A创建一个读视图,记录当前数据库的状态。
-
当事务A执行一个查询时,系统会检查查询的数据行的版本号与事务A的读视图中记录的版本号。
-
如果查询的数据行的版本号大于事务A的读视图中记录的版本号,说明这个数据行是由在事务A开始之后提交的事务修改的,因此事务A不能读取到该数据行。
-
如果查询的数据行的版本号小于等于事务A的读视图中记录的版本号,说明这个数据行在事务A开始之前就存在,因此事务A可以读取到该数据行。
-
-
当事务A执行一个写操作时,系统会为该操作创建一个写版本,并将写版本号记录在事务A的读视图中。
-
当其他事务B执行一个查询时,系统会检查查询的数据行的版本号与事务B的读视图中记录的版本号。
-
如果查询的数据行的版本号大于事务B的读视图中记录的版本号,说明这个数据行是由在事务B开始之后提交的事务修改的,因此事务B不能读取到该数据行。
-
如果查询的数据行的版本号小于等于事务B的读视图中记录的版本号,说明这个数据行在事务B开始之前就存在,因此事务B可以读取到该数据行。
-
通过这种方式,MVCC可以确保并发事务之间的读写操作不会互相干扰,从而提高数据库的并发性能
原文地址: https://www.cveoy.top/t/topic/ir2F 著作权归作者所有。请勿转载和采集!