Mysql delete刪除表數據之後,表空間沒有釋放的問題

事件起因:

今天運維人員找我,說我們的數據庫磁盤空間滿了。於是提供了一些刪除表數據的sql給他,讓他執行下。

執行之後,查詢數據庫,表數據是不在了,但是問題來了。

磁盤空間並沒有釋放,這是爲啥咧????

 

於是乎,上網查找資料,功夫不負有心人,終於找到問題原因:

使用delete 加上 where條件的刪除都不是真刪除,在刪除數據的時候,mysql並沒有把數據文件刪除,而是將數據文件的標識位刪除,沒有整理文件,因此不會徹底釋放空間。
被刪除的數據將會被保存在一個鏈接清單中,當有新數據寫入的時候,mysql會利用這些已刪除的空間再寫入。刪除操作會帶來一些數據碎片,正是這些碎片在佔用硬盤空間。

 

解決方法:

執行完delete語句的時候,再執行下:OPTIMIZE TABLE  XXXTable(自己的表名)

 

注意事項:

執行OPTIMIZE TABLE的時候,會導致鎖表,而且沒有必要每次delete之後都執行,一個月定時清理下即可。另外,OPTIMIZE 操作會導致鎖表,建議在訪問量小的時候執行!

 

自我總結

今天才碰到這樣的問題,mysql的delete方法,之前一直以爲是直接刪除掉了,數據佔用的表空間也自然會釋放,但是今天才發現,delete語句後加where條件刪除的數據會自動加個delete標識而不會真的刪掉。學的太淺了,還需多多努力!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章