由事务扩展开谈一谈 (2)

image

image

image

Read View:

Read View 是事务进行快照读的时候生成的视图,在事务执行快照读的那一刻,会生成一个数据系统当前的快照,记录并维护系统当前活跃事务的id,事务的id值是递增的。

Read View 的最大作用是用来做可见性判断的,有三个全局属性:

trx_list:一个数值列表,存储活跃的事务ID

up_limit_id:记录 trx_list 列表中事务ID最小的ID

low_limit_id:记录 Read View 生成时刻系统尚未分配的下一个事务ID

具体的比较规则如下:

首先比较 DB_TRX_ID < up_limit_id,是:当前事务能看到 DB_TRX_ID 所在的记录,否:进入下一个判断

判断 DB_TRX_ID >= low_limit_id,是:代表 DB_TRX_ID 所在的记录在 Read View 生成后才出现的,对于当前事务肯定不可见,否:进入下一步判断

判断 DB_TRX_ID 是否在活跃事务中,是:当前事务是看不到活跃事务的,否:说明这个事务在 Read View 生成之前就已经提交了,那么修改的结果是能够看见的。

RC、RR级别下快照读有什么不同

在 RC 隔离级别下,每个快照读都会生成并获取最新的 Read View

在 RR 隔离级别下,同一个事务中的第一个快照读才会创建 Read View,之后的快照读获取的都是同一个 Read View

如何解决幻读问题

如果事务中都是用快照读,那么不会产生幻读的问题

快照读和当前读一起使用的时候就会产生幻读

如果都是当前读的话,通过间隙锁来解决幻读问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyggyf.html