MYSQL-->InnoDB引擎底层原理( 五 )


  • trx_id > max_trx_id          不可以访问该版本      这个条件成立,说明事务是在ReadView生成之后才开启的
  • min_trx_id <= trx_id <= max_trx_id    如果trx_id不在m_ids中,就可以访问该版本
    这个条件成立,说明数据已经提交 。
  • 根据隔离级别的不同ReadView生成时机不同
    1. 在Read Committed隔离级别下
      在事务第一次执行快照读时都生成一个Read view
    2. 在Repeatable read隔离级别下
      在事务第一次执行快照读时生成,后续复用这个Read view
    在RC隔离级别下,版本链访问原理分析在事务第一次执行快照读时都生成一个Read view
    第一个快照读,读取情况
    MYSQL--&gt;InnoDB引擎底层原理

    文章插图
    这个快照读,根据规则,读取的是0x00002这个地址的数据,对应着事务2修改后的数据内容 。
    第二个快照读,读取情况
    MYSQL--&gt;InnoDB引擎底层原理

    文章插图
    这个快照读,根据规则读取到的是,0x00003地址的数据内容,就是事务3修改后的数据 。
    在RR隔离级别下,版本链访问原理分析在RR隔离级别下,只有事务在第一次执行快照读的时候生成ReadView,后续复用这个ReadView
    MYSQL--&gt;InnoDB引擎底层原理

    文章插图
    具体的和RC规则一致,不重复讲解 。
    总结隐藏字段+Undo log版本链+ReadView组成MVCC
    MVCC+锁构成事务的隔离机制
    事务的一致性由Redo log和undo log共同保证

    经验总结扩展阅读