MySQL

Read View 怎么判断一个版本能不能看

事务拍快照时,InnoDB 记下四个值:

字段含义
m_ids拍快照时还没提交的读写事务
min_trx_idm_ids 里最小的
max_trx_id下一个要分配的事务 id
creator_trx_id自己

读一行时,从最新版本开始,看它的 trx_id:

  1. 等于 creator_trx_id:自己改的,可见
  2. 小于 min_trx_id:拍快照前就提交了,可见
  3. 大于等于 max_trx_id:拍快照后才开始的事务,不可见
  4. 在中间:查 m_ids,在里面就是当时还没提交,不可见,否则可见

不可见就沿 DB_ROLL_PTR 去 undo 里找上一个版本,直到找到第一个可见的。

RR 整个事务只拍一张快照,RC 每条语句拍一张,可重复读和读已提交的区别就从这里来。

esc