使用delete
語句刪除資料時,delete
語句只是將記錄的位置或資料頁標記為了“可複用”,但是磁碟檔案的大小不會改變,即資料表空間不會直接回收。此時您可以通過optimize table
語句釋放資料表空間。
前提條件
- 僅InnoDB和MyISAM引擎支援
optimize table
語句。 - 執行個體剩餘磁碟空間需要大於等於需釋放表的空間。當執行個體剩餘磁碟空間不足時,建議先擴容磁碟空間,如何擴容請參見變更配置。說明 執行
optimize table
語句時,表資料會複製到建立的暫存資料表中,增加執行個體的磁碟使用率。
注意事項
- 如果您沒有使用
delete
語句刪除大量表資料,使用optimize table
語句也無法降低資料表空間的使用率。說明 如果執行個體剩餘磁碟空間不足,且未進行大量刪除表的操作,可以參見以下文檔擴容磁碟儲存空間: optimize table
語句在RDS MySQL 5.7、RDS MySQL 8.0上採用Online DDL方式執行,允許並發執行DML。對大表進行optimize table操作會帶來突發的IO和Buffer使用量,可能導致鎖表和搶佔資源,業務高峰期可能會導致執行個體不可用以及監控斷點。建議在業務低峰期操作。
通過命令列操作
- 串連MySQL資料庫,詳情請參見通過命令列、用戶端串連RDS MySQL執行個體。
- 執行以下SQL語句,釋放資料表空間。
optimize table [$Database1].[Table1],[$Database2].[Table2]
說明- [$Database1]與[$Database2]為資料庫名,[Table1]與[Table2]為表名。
- 在InnoDB引擎中執行
optimize table
語句時,會出現以下提示資訊,該資訊是正常執行返回的結果,您可忽略資訊,確認返回“ok”即可。詳情請參見OPTIMIZE TABLE Statement。Table does not support optimize, doing recreate + analyze instead
通過DMS操作
- 登入MySQL資料庫,詳情請參見通過DMS登入RDS資料庫。
- 在左側選擇目標執行個體的執行個體ID,然後雙擊目標庫,按右鍵任意表名,然後選擇大量操作表。
- 勾選需要釋放空間的表名,然後選擇 。
- 在彈出的對話方塊中確認變更資訊正確,然後單擊確認即可。