使用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,然后雙擊目標庫,右鍵單擊任意表名,然后選擇批量操作表。
- 勾選需要釋放空間的表名,然后選擇 。
- 在彈出的對話框中確認變更信息正確,然后單擊確認即可。
文檔內容是否對您有幫助?