InnoDB MVCC是什么?

InnoDB MVCC 即 Multi-Versioning,InnoDB是一个支持多版本控制的存储引擎

在事务中进行修改数据之前,会先保存旧版本的行信息,以用来支持并发和回滚等事务特性,这些信息存储在undo log中,称为 rollback segment(回滚段 ?)。

在内部,InnoDB会为每张表添加3个隐藏字段:

  6字节的DB_TRX_ID,表示最后插入此行或者更新此行的事务ID, 注意:删除操作在内部被视为更新,会在行里用一个特殊标记表示;

  7字节的DB_ROLL_PTR, 一个指针,指向回滚上一个版本信息的 rollback segment;

  6字节的DB_ROW_ID,行号,随插入自增,如果没有指定主键,并且没有列有唯一性,会根据此列的值组织聚集索引;

 

rollback segment中包含两种类型的log:

  insert:回滚插入操作,在事务提交时可以立即在undo log中丢弃;

  update:回滚更新操作,只有在所有的事务快照中不包含此段日志时,才能从undo log中丢弃;

如果设置autocommit为0时,一定要记得提交事务,不然undo log文件会变得很大;

在删除数据时,不会立即物理删除,会先在行里用一个特殊标记表示,只有在相关的事物执行完毕并丢undo log里的相关rollback segment时,才会被MySQL中的purge(清除)线程物理删除。

 

内容参考自 https://dev.mysql.com/doc/refman/5.7/en/innodb-multi-versioning.html

posted @ 2020-04-28 10:03  xiyou  阅读(333)  评论(0编辑  收藏  举报