虽然Undo log是如此的重要,但在MySQL 5.6(包括5.6)之前Undo tablespace里面的undo数据文件是无法收缩的。也就是说在实例的运行过程中如果遇到有大的事务,会把undo log的文件撑的非常大。进而浪费大量的空间甚至把磁盘打爆。同时也增加了数据库物理备份的时间。在实际的工作中不止一次遇到这类问题。好在MySQL5.7中新增了一个非常有用的功能允许用户在线truncate undo log,进而是undo log文件进行收缩。

必须使用独立的undo表空间,该功能主要由以下参数控制

(2) 创建表:

(3)插入测试数据

此时,为了,让purge线程运行,可以运行几个delete语句:

再查看undo文件大小:

在MySQL 5.7中我们有了一个有效的方法可以在数据库实例运行的过程中动态的回收undo log占用的空间。