mysql刪除數據(delete)之后如何釋放磁盤空間


問題背景

收到運維提示數據庫服務所在機器磁盤空間不足,在不滿足遷移條件的情況下則需要進行冷數據本地備份刪除操作,在delete掉冷數據發現磁盤空間並沒有進行釋放,表的ibd文件大小沒有變化。

問題分析

InnoDB 數據庫在使用 delete 進行刪除操作的時候,只會將已經刪除的數據標記為刪除,並沒有把數據文件刪除,因此並不會徹底的釋放空間。這些被刪除的數據會被保存在一個鏈接清單中,當有新數據寫入的時候,MySQL 會重新利用這些已刪除的空間進行再寫入。

解決方法

官方推薦可以使用 OPTIMIZE TABLE 命令來優化表,該命令會重新利用未使用的空間,並整理數據文件的碎片。

OPTIMIZE TABLE 是指對表進行優化。如果已經刪除了表的一大部分數據,或者如果已經對含有可變長度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)進行了很多更改,就應該使用 OPTIMIZE TABLE 命令來進行表優化。這個命令可以將表中的空間碎片進行合並,並且可以消除由於刪除或者更新造成的空間浪費 。

OPTIMIZE TABLE 命令只對 MyISAM 、 BDB 和 InnoDB 表起作用 。表優化的工作可以每周或者每月定期執行,對提高表的訪問效率有一定的好處,但是需要注意的是,優化表期間會鎖定表,所以一定要安排在空閑時段進行。

操作如下

先查看表的數據量及表ibd文件大小,然后進行冷數據備份刪除。

刪除前:

刪除后並進行優化:

OPTIMIZE TABLE tablename;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM