tft每日頭條

 > 科技

 > mysql的表空間詳解

mysql的表空間詳解

科技 更新时间:2025-01-18 11:10:05
概述

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

mysql的表空間詳解(詳解mysql5.7特性--在線回收UNDO表空間)1


在線回收UNDO表空間

mysql的表空間詳解(詳解mysql5.7特性--在線回收UNDO表空間)2

在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次,如:

mysql的表空間詳解(詳解mysql5.7特性--在線回收UNDO表空間)3

可以發現undo log空間急速增長,如:

mysql的表空間詳解(詳解mysql5.7特性--在線回收UNDO表空間)4

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

mysql的表空間詳解(詳解mysql5.7特性--在線回收UNDO表空間)5

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

mysql的表空間詳解(詳解mysql5.7特性--在線回收UNDO表空間)6


總結

這個功能出來以後,整體降低了磁盤空間使用率,并且加快了xtrabackup熱備份的速度。

後面會分享更多devops和DBA方面的内容,感興趣的朋友可以關注一下~

mysql的表空間詳解(詳解mysql5.7特性--在線回收UNDO表空間)7

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved