1. innodb_max_undo_log_size 是什么? innodb_max_undo_log_size 是一个系统变量,用于设置独立 undo 表空间文件的最大容量。当 undo 表空间文件达到这个容量限制时,如果启用了 innodb_undo_log_truncate 参数,MySQL 会尝试收缩这个文件,释放不再需要的空间。
满足以上2个条件后,把innodb_undo_log_truncate设置为ON即可开启undo表空间的自动truncate,这还跟如下2个参数有关: (1)innodb_max_undo_log_size,undo表空间文件超过此值即标记为可收缩,默认1G,可在线修改; (2)innodb_purge_rseg_truncate_frequency,指定purge操作被唤起多少次之后才释放rollback segments。当undo...
innodb_max_undo_log_size:本地磁盘文件中,Undo-log的最大值,默认1GB。 innodb_rollback_segments:指定回滚段的数量,默认为1个。 除开上述两个参数外,其他参数基本上是在MySQL5.6才有的,如下: innodb_undo_directory:指定Undo-log的存放目录,默认放在.ibdata文件中。 innodb_undo_logs:指定回滚段的数量,默认为...
| innodb_max_undo_log_size |104857600| | innodb_undo_directory | ./ | | innodb_undo_log_truncate |ON| | innodb_undo_logs |128| | innodb_undo_tablespaces |3| +---+---+5rows in set (0.00sec) 模拟undo 增长,超过 innodb_max_undo_log_size 设置大小 # du -sh ./undo*152M ./undo...
1、事务A执行UPDATE操作,此时事务还没提交,会将数据进行备份到对应的Undo Buffer,然后由Undo Buffer持久化到磁盘中的Undo Log文件中,此时Undo Log保存了未提交之前的操作日志,接着将操作的数据,也就是test表的数据持久保存到InnoDB的数据文件IBD。 2、此时事务B进行查询操作,直接从Undo Buffer缓存中进行读取,这时事务...
同时,更多的责任意味着更复杂的管理逻辑,InnoDB中其实是把Undo当做一种数据来维护和使用的,也就是说,Undo Log日志本身也像其他的数据库数据一样,会写自己对应的Redo Log,通过Redo Log来保证自己的原子性。因此,更合适的称呼应该是Undo Data。 Undo Record中的内容 ...
1、事务A执行UPDATE操作,此时事务还没提交,会将数据进行备份到对应的Undo Buffer,然后由Undo Buffer持久化到磁盘中的Undo Log文件中,此时Undo Log保存了未提交之前的操作日志,接着将操作的数据,也就是test表的数据持久保存到InnoDB的数据文件IBD。 2、此时事务B进行查询操作,直接从Undo Buffer缓存中进行读取,这时事务...
当innodb_undo_tablespaces取值为2时,表示实例允许使用独立的undo表空间存储undo数据,可以进行清理。 当undo文件大小超过innodb_max_undo_log_size参数值且其中的日志不再被任何活动的事务所需要时,系统会对undo文件进行truncate操作,清理过大的文件并释放空间。如何开启参数,请参见设置实例参数。
启用Undo日志回收:InnoDB提供了Undo日志回收机制,可以定期清理不再需要的Undo日志。可以通过设置innodb_undo_log_truncate参数为1来启用该功能,并设置合适的innodb_max_undo_log_size参数来控制回收的最大大小。 监控和告警:定期监控Undo日志的使用情况,当达到预设阈值时触发告警,以便及时采取措施。 示例代码 以下是一个...
在该问题中,通过排查发现 undolog过了 10 个小时依然没有清理完,正常情况下不会出现该情况,而是由于参数 super_read_only 触发的 bug 导致的。可以通过调大 innodb_max_undo_log_size 参数,undo log 大小达到阈值前被 purge 掉,这样空间可以重用,很难达到阈值,所以不会触发 undo log truncate,所以也就不会触...