Mysql

MySQL:DELETE 沒有縮小數據庫大小,也沒有縮小表大小

  • February 2, 2021

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 以暫時節省空間嗎

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