回滚日志undo log是什么?
独立的Undo 表空间
回滚日志undo log 是与事务关联的undo log记录的集合。当我们对记录做了变更操作时就会产生undo记录,Undo记录默认被记录到系统表空间(ibdata)中,但从5.6开始,也可以使用独立的Undo 表空间。
回滚日志记录包含有关如何回滚事务对聚集索引记录的最新更改的信息。如果另一个事务需要查看原始版本的数据(快照读),则会从undo log记录中检索原始版本的数据。
Undo log是InnoDB MVCC事务特性的重要组成部分。快照读以及事务回滚都需要使用undo log.
Undo记录中存储的是老版本数据,当一个旧的事务需要读取数据时,为了能读取到老版本的数据,需要顺着undo链找到满足其可见性的记录。
InnoDB支持128个回滚段,每个段最多支持1023个并发数据修改事务,总共限制大约128K个并发数据修改事务(只读事务不计入最大限制)。每个事务都被分配到其中一个回滚段,并在该持续时间内与该回滚段保持关联。 innodb_rollback_segments选项定义了InnoDB使用的回滚段数。
undo tablespaces (独立的回滚表空间)
可以配置undo log存放在独立的undo tablespaces里面。配置单独的undo tablespaces时,系统表空间中的回滚段将失效。
undo tablespaces由一个或多个回滚日志文件组成。
定义使用的undo tablespaces数量,这个选项必须在初始化MySQL之前进行配置。
这个值也对应undo log文件的个数,每个undo log文件代表一个独立的回滚表空间。
定义回滚段的总数量。innodb_rollback_segments的默认设置为128,这也是最大值。
即使定义了独立的undo log space,系统表空间仍会占用一个回滚段,所以innodb_rollback_segments值必须要大于等于 1+innodb_undo_tablespaces