mysql回收日志_MySQL5.7 可以回收(收縮)undo log回滾日志物理文件空間

undo log回滾日志是保存在共享表空間ibdata1文件里,隨着業務的不停運轉,ibdata1文件會越來越大,想要回收(收縮空間大小)極其困難和復雜, 必須先mysqldump -A全庫的導出,然后刪掉data目錄,然后重新初始化安裝,最后再把全庫的SQL文件導入,采用這種方法進行ibdata1文件的回收。

在MySQL5.6里,可以把undo log回滾日志分離出去,到一個單獨的表空間里,具體請參考: http://hcymysql.blog.51cto.com/5223301/973450 ,但缺點就是不能進行回收(收縮)空間大小。直到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次,如:

a34b18a230ff4af85dcfd6e916f31286.png

然后你會發現undo log空間急速增長,如:

03e01cc4387b54f042030e71db679a4d.png

然后用sysbench做壓力測試,讓數據庫運行起來,觀察錯誤日志,就會自動把undo log空間給回收(收縮),如:

3169f46dd07cdd9ae34c4eaa8d41577c.png

再通過觀察物理文件,已經被回收了,默認10M大小。

e04daf3370b7988e5036953275a59e19.png

總結:

這個功能出來以后,降低了磁盤空間使用率(當然,土豪隨意),並且加快了xtrabackup熱備份的速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值