Mysql

InnoDB 是否會釋放未使用的磁碟空間?

  • August 28, 2017

由於一個錯誤(現已修復),一個具有 500M 行的大型 MySQL 關聯表最近膨脹為 1B 行。磁碟使用量從 ~130GB 增加到 240GB。

不幸的是,此伺服器上沒有空間用於任何標準補救措施(OPTIMIZE或者ALTER TABLE table ENGINE=InnoDB,轉儲和重建,建構到臨時表並重命名和刪除舊表等)。我只剩下 50GB。

這是問題:

雖然到目前為止我已經成功刪除了超過 1 億行(1B 下降到 850M),但磁碟使用量實際上增長了 10GB(達到 250GB)。是的,新記錄也在每秒添加,但我刪除的速度比添加的速度快得多。

  1. InnoDB 會釋放這個空間嗎?
  2. 為什麼表磁碟使用量會增加,而我正在減少行數?

當正常解決方案不適合時,還有什麼其他建議可以回收未使用的磁碟空間?

單個表 ( .ibd) 的 InnoDB 表空間大小可以使用OPTIMIZE和減小ALTER TABLE ... ENGINE=InnoDB;,但係統表空間文件ibdata1永遠不能收縮。

撤消日誌中 ibdata1 增長的來源。

自 2013 年 7 月以來,我已經寫過關於此的文章我首先從 Percona 的文章Reasons for run-away main Innodb Tablespace中了解到這種現象。

建議#1

如果您將數據 mysqldump 到另一個在新安裝的實例中執行 mysql 的伺服器中,您可以設置複製到它,然後故障轉移並丟棄舊的主伺服器。

建議#2

如果您沒有另一台伺服器,您將停止應用程序,mysqldump 數據,刪除所有 DB,關閉 mysql,刪除 ibdata1,啟動 mysql(重新創建 ibdata1,重新載入 mysqldump)。請參閱我的舊文章Howto:清理 mysql InnoDB 儲存引擎?

引用自:https://dba.stackexchange.com/questions/184502