Mysql
MySQL:DELETE 沒有縮小數據庫大小,也沒有縮小表大小
在
mydatabase
中,有一個table1
幾乎 8M 行的表,從表中刪除大約 7M 行後,DB 的大小和表本身保持不變。表大小:
+---------------------------------------------+-----------+ | Table | Size (MB) | +---------------------------------------------+-----------+ | Table1 | 96000 |
刪除查詢:
DELETE FROM table1 WHERE foo < 'boo'; Query OK, 7809000 rows affected (43.25 sec)
刪除數據後的大小:
+---------------------------------------------+-----------+ | Table | Size (MB) | +---------------------------------------------+-----------+ | Table1 | 96000 |
知道為什麼從該表中刪除數據不會減少數據庫大小嗎?
伺服器版本:5.7.19-17-log Percona Server (GPL)
從 InnoDB 表中刪除表行時不會自動清理碎片。
您必須手動對錶進行碎片整理。
方法#1
您可以執行以下
OPTIMIZE TABLE table1;
這將為您執行以下操作
ALTER TABLE table1 ENGINE=InnoDB; ANALYZE TABLE table1;
如果您仍然有很多行,這可能會鎖定表(這需要停機)。完成後,表會變小。確保您有足夠的磁碟空間來重建表。
方法#2
如果您無法承受停機時間,則必須使用pt-online-schema-change對錶進行碎片整理。我剛剛在最近的一篇文章中提到:我可以禁用 binlogs 以暫時節省空間嗎