undolog介绍:
undo log 为 MVCC事务特性的重要组成部分,对记录做了变更操作时会产生undo记录,默认存储到系统表空间中,但是从5.6开始,可以使用独立的undo表空间。
Undo记录存储的是老版本数据,当一个旧事务需要读取数据时,为了能读取到老版本数据,需要顺着undo连找到满足其可见性的记录。
大多数对记录的变更insert、update、delete。Insert操作在事务提交前只对当前事务可见,因此产生的undo日志可以在事务提交后直接删除(没有对刚插入的数据有可见性需求),而对于update、delete则需要维护多版本信息。
与undo log相关参数:
1–innodb_max_undo_log_size 1073741824
该参数控制醉倒undolog文件的大小,超过这个阈值,就会触发truncate undo logs,truncate后的undo log大小默认恢复为10MB,
生产默认1G。
2–innodb_undo_directory ./
undo文件的存储目录 (支持后期修改)
3–innodb_undo_log_truncate OFF
5.7之后支持在线删除无用的undo logs,默认是关闭的。
4–innodb_undo_logs 128 (生产使用默认值)
回滚段的数量默认是128个(最大),通过该参数可以将一个大的回滚段才分成多个小的回滚段,每个log segments最多存放128个事物。
支持后期修改,但不可以超过 Innodb_available_undo_logs 参数
5–innodb_undo_tablespaces 4(生产配置)
undo log的数量,最少为2,undo log的truncate操作有purge协调线程发起。在truncate某个undo log表空间的过程中,保证有一个可用的undo log可用。
在mysql_install_db时初始化后,就再也不能被改动了,修改该值会导致MySQL无法启动。
不支持后期修改。
6–innodb_purge_rseg_truncate_frequency 128(生产配置)
5.7之后控制回放undo log的频率,默认128.
表示purge undo轮训128次之后,进行一次undo 的truncate操作,