MVCC
基本概念
多版本并发控制(mvcc)
当前读和快照读
当前读: 总是读到最新的数据
select * from lock in share mode
快照读: 读取的是历史版本的记录
select .....
隐藏字段 (每一行上包括几个用户不可见的字段)
-
DB_TRX_ID:创建或者是最后一次的修改的ID,比如某一个被 事务1,事务2,事务3,事务4的顺序进行了修改,那么这个DB_TRX_ID则会记录4。 -
DB_ROW_ID:隐藏主键。 -
DB_ROW_PTR: 回滚指针,指向undolog。

ReadView
事务在进行快照读的时候,产生的读视图
-
trx_list系统活跃事务ID -
up_limit_id列表中事务最小的ID -
low_limit_id系统尚未分配的下一个事务ID


可见性判断的过程
-
首先判断
DB_TRX_ID<up_limit_id,如果小于,则当前事务能看到看到DB_TRX_ID所在的记录,如果大于等于,则进入下一个判断。 -
接下来判断
DB_TRX_ID>=low_limit_id,如果大于等于代表DB_TRX_ID所在的记录,在Read View生成以后才出现,那么对于当前事务肯定是不可见的。如果小于,则进入下一步判断。 -
判断
DB_TRX_ID是否在活跃事务中,如果在,那么表示,这个事务还在活跃中,还没有commit,那么修改数据,当前事务是看不到的,如果不在,则说明这个事务在read View生成之前就已经开始开始commit了,那么修改的结果当然是可以看见的。
参考文献
【数据库中的MVCC到底是个啥?】 https://www.bilibili.com/video/BV16VVRzuEvL/?share_source=copy_web&vd_source=80cf96a12f63a1720dfc645c2eb041c0
https://www.cnblogs.com/qdhxhz/p/15750866.html
浙公网安备 33010602011771号