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

可见性判断的过程

  1. 首先判断DB_TRX_ID< up_limit_id,如果小于,则当前事务能看到看到 DB_TRX_ID 所在的记录,如果大于等于,则进入下一个判断。

  2. 接下来判断 DB_TRX_ID >= low_limit_id,如果大于等于代表 DB_TRX_ID所在的记录,在 Read View 生成以后才出现,那么对于当前事务肯定是不可见的。如果小于,则进入下一步判断。

  3. 判断DB_TRX_ID 是否在活跃事务中,如果在,那么表示,这个事务还在活跃中,还没有 commit,那么修改数据,当前事务是看不到的,如果不在,则说明这个事务在 read View 生成之前就已经开始开始commit了,那么修改的结果当然是可以看见的。

posted @ 2021-09-17 17:30  沧海一声笑rush  阅读(66)  评论(0编辑  收藏  举报