全部產品
Search
文件中心

ApsaraDB RDS:使用“optimize table”命令釋放MySQL執行個體的資料表空間

更新時間:Jun 19, 2024

使用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使用量,可能導致鎖表和搶佔資源,業務高峰期可能會導致執行個體不可用以及監控斷點。建議在業務低峰期操作。

通過命令列操作

  1. 串連MySQL資料庫,詳情請參見通過命令列、用戶端串連RDS MySQL執行個體
  2. 執行以下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操作

  1. 登入MySQL資料庫,詳情請參見通過DMS登入RDS資料庫
  2. 在左側選擇目標執行個體的執行個體ID,然後雙擊目標庫,按右鍵任意表名,然後選擇大量操作表
  3. 勾選需要釋放空間的表名,然後選擇表維護 > 最佳化表最佳化表
  4. 在彈出的對話方塊中確認變更資訊正確,然後單擊確認即可。