mysql的表空间详解(详解mysql5.7特性--在线回收UNDO表空间)
概述
在线回收UNDO表空间
验证过程
总结
undo log回滚日志是保存在共享表空间ibdata1文件里,随着业务的不停运转,ibdata1文件会越来越大,想要回收(收缩空间大小)极其困难和复杂, 必须先mysqldump -A全库的导出,然后删掉data目录,然后重新初始化安装,最后再把全库的SQL文件导入,采用这种方法进行ibdata1文件的回收。那么有没有什么更好的办法呢?
在线回收UNDO表空间
在MySQL5.6里,可以把undo log回滚日志分离出去,到一个单独的表空间里,但缺点就是不能进行回收(收缩)空间大小。直到MySQL5.7 ,才支持在线收缩。
- innodb_undo_log_truncate参数设置为1,即开启在线回收(收缩)undo log日志文件,支持动态设置。
- innodb_undo_tablespaces参数必须大于或等于2,即回收(收缩)一个undo log日志文件时,要保证另一个undo log是可用的。
- innodb_undo_logs: undo回滚段的数量, 至少大于等于35,默认128。
- innodb_max_undo_log_size:当超过这个阀值(默认是1G),会触发truncate回收(收缩)动作,truncate后空间缩小到10M。
- innodb_purge_rseg_truncate_frequency:控制回收(收缩)undo log的频率。undo log空间在它的回滚段没有得到释放之前不会收缩,想要增加释放回滚区间的频率,就得降低innodb_purge_rseg_truncate_frequency设定值。
验证过程
对一张100万的sbtest表,进行全表更新4次,如:
可以发现undo log空间急速增长,如:
然后用sysbench做压力测试,让数据库运行起来,观察错误日志,就会自动把undo log空间给回收(收缩),如:
再通过观察物理文件,已经被回收了,默认10M大小。
总结
这个功能出来以后,整体降低了磁盘空间使用率,并且加快了xtrabackup热备份的速度。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com