多版本并发控制

  InnoDB的MVCC,是经过在每行记录后边保存三个隐讳的列来落成的里边的多少个列一个封存了行的始建时间,贰个保存行的过期时间(或删除时间)。当然存款和储蓄的并非实际上的时刻值,而是系统版本号(system version number):

  1、DB_TRX_ID :6字节的事务ID,每管理多个事情,其值自动+1,上述说的
“创设时间”和 “删除时间”
记录的就是那几个DB_TRX_ID值,DB_TRX_ID是最要紧的一个,能够透过“show
engine innodb status”来查

  2、DB_ROLL_PT科雷傲:大时辰7byte,指向写到rollback
segment(回滚段)的一条undo log记录(update操作的话,记录update前的row值)

  3、DB_ROLL_ID:大小是6字节,该值随新行插入单调扩展,当由innodb自动发生集中索引时,聚焦索引包含那么些DB_ROW_ID的值,不然的话聚焦索引中不富含这些值(作者的了然是一旦集中索引不是机关发出的话,就不会有DB_ROLL_ID这个值)。 这一个用于索引个中
  MVCC只在REPEATABLE READ和READ
COMMITTED多少个隔断品级下工作。其余多少个隔离等级都和MVCC不宽容。下边看一下在REPEATABLE
READ隔绝品级下,MVCC具体是何许操作的

  SELECT

    • InnoDB只查找版本早于当前专门的学问版本的数目行(也正是行的种类版本号必须低于等于专门的学问的版本),那确认保证当前事务读取的行都以工作早先已经存在的,只怕是由方今事情创立或涂修正的。
    • 行的删除操作的本子一定是未定义的如故超过当前事情的版本号。鲜明了现阶段政工开头早先,行并未有被剔除

  独有顺应上述两点手艺回来查询结果。

  INSERT

    InnoDB为各类新添行记录当前系统版本号作为制造ID

  DELETE

     InnoDB为除去的每豆蔻年华行保存当前系统版本号作为行删除标识

  UPDATE 

    InnoDB为插入风姿洒脱行新记录,保存当前系统版本号作为行版本号,同事保存当前系统版本号到原本的行作为行删除标记

参考:

[1] 《高品质MySQL》(第三版), Baron Schwartz等 著,宁海元等
译,电子工业出版社 ,二零一二

[2] 博客,

[3]
博客,

[4] 博客,

[5] 博客,

[6]
博客,

Leave a Comment.