全部產品
Search
文件中心

ApsaraDB RDS:RDS MySQL空間不足問題

更新時間:Jun 19, 2024

RDS MySQL執行個體的空間使用率是日常需要重點關注的監控項之一,如果執行個體的儲存空間不足,會導致嚴重後果,例如資料庫無法寫入、資料庫無法備份、儲存空間擴容任務耗時過長等。本文介紹查看空間使用方式的方式,以及各種空間問題的原因和解決方案。

查看空間使用方式

  • 您可以在執行個體的基本資料頁面查看儲存空間使用方式,但是這裡只展示當前的空間使用總量,沒有展示各類資料分別佔用的磁碟空間資訊,也沒有空間使用的歷史資訊。基本資料

  • 您可以在控制台查看執行個體各類資料佔用的磁碟空間資訊,詳情請參見查看監控資訊

  • 您可以在控制台的自治服務 > 一鍵診斷頁面,單擊空間分析頁簽,查看執行個體更詳細的空間使用方式,包括資料與日誌的空間使用對比、空間使用的歷史變化趨勢、Top資料庫空間明細、Top資料表空間明細等。空間分析1空間分析2

    說明
    • 資料表空間包含資料空間、索引空間和未使用空間(已保留給該表但還未分配使用的空間)。

    • 空間大小是從統計資訊中採集的,和真實的空間大小可能會存在誤差。

  • 登入資料庫後執行命令show table status like '<表名>';查看錶空間。

索引太多導致空間不足

  • 現象

    通常表上除了主鍵索引,還存在二級索引,二級索引越多,整個資料表空間越大。

  • 解決方案

    最佳化資料結構,減少二級索引數量。

大欄位導致空間不足

  • 現象

    如果表結構定義中有blob、text等大欄位或很長的varchar欄位,也會佔用更大的資料表空間。

  • 解決方案

    將資料壓縮以後再插入。

空閑資料表空間太多導致空間不足

  • 現象

    空閑資料表空間太多是指InnoDB表的片段率高。InnoDB是按頁(Page)管理資料表空間的,如果Page寫滿記錄,然後部分記錄又被刪除,後續這些刪除的記錄位置又沒有新的記錄插入,就會產生很多空閑空間。

  • 解決方案

    可以通過命令show table status like '<表名>';查看錶上閒置空間,如果空閑空間過大,可以執行命令optimize table <表名>;整理資料表空間。

暫存資料表空間過大導致空間不足

  • 現象

    • 半串連(Semi-join)、去重(distinct)、不走索引的排序等操作,會建立暫存資料表,如果涉及的資料量過多,可能導致暫存資料表空間特別大。

    • DDL操作重建資料表空間時,如果表特別大,建立索引排序時產生的臨時檔案也會特別大。RDS MySQL 5.6和5.7不支援即時增加欄位,很多DDL是通過建立新表實現的,DDL執行結束再刪除舊錶,DDL過程中會同時存在兩份表。

  • 解決方案

    • 可以查看執行計畫,確認是否包含Using Temporary

    • 大表DDL需要注意執行個體的空間是否足夠,不足的話需要提前升級儲存空間

空間最佳化方案

  • 使用空間片段自動回收。開啟該功能後,主執行個體會自動執行Optimize Table命令來回收資料表空間片段,協助您整理物理空間片段。

  • 使用雲端硬碟儲存。雲端硬碟支援的儲存空間比本地碟更大。

  • 使用X-Engine引擎。X-Engine是支援高壓縮比的儲存引擎。

  • 使用PolarDB。PolarDB採用分布式儲存,支援超大儲存空間,且支援自動擴容,結合PolarDB歷史庫(採用X-Engine引擎),可以大大降低資料佔用的磁碟空間。

  • 高可用雲端硬碟版執行個體可以開啟儲存空間自動擴容功能,防止空間不足被鎖定。更多資訊,請參見設定儲存空間自動擴容

  • 採用AnalyticDB