全部產品
Search
文件中心

ApsaraDB RDS:解決MySQL執行個體空間滿自動鎖定的問題

更新時間:Sep 20, 2024

RDS MySQL執行個體由於慢SQL、插入資料多等原因導致執行個體空間滿,為避免資料丟失,RDS會對執行個體進行自動鎖定,鎖定之後,將無法進行寫入操作。您可以參照本文清理資料檔案、臨時檔案、Binlog檔案、undo檔案和general_log檔案,解決儲存空間問題。

問題描述

阿里雲RDS MySQL版執行個體由於慢SQL、插入資料多等原因導致執行個體磁碟空間滿,為避免資料丟失,執行個體會自動鎖定,且無法進行寫入操作,導致在執行個體詳情頁面的運行狀態為鎖定中

常見原因

造成執行個體空間滿的主要原因有以下幾種:

  • 資料檔案磁碟空間佔用高。

  • 記錄檔磁碟空間佔用高。

    在沒有正確設定記錄備份策略時,可能會由於大事務SQL導致日誌增長較快。

  • 臨時檔案磁碟空間佔用高。

    通常導致臨時檔案佔用高的原因是由於查詢語句的排序、分組、關聯表產生的暫存資料表檔案,或者大事務未提交前產生的日誌快取檔案。

  • 系統檔案磁碟空間佔用高。

    系統檔案過大主要是由於undo檔案過大。當存在對InnoDB表長時間不結束的查詢語句,而且在查詢過程中表有大量的資料變化時,系統會產生大量的undo資訊,佔用大量儲存空間。

    說明

    對於RDS MySQL 8.0,系統會自動清理undo檔案,不會出現此問題。

  • general_log檔案磁碟佔用高。

    當RDS MySQL開啟了general_log後,該檔案記錄了使用者的所有操作,包括每條SQL語句的執行細節,無論是查詢、插入、更新還是刪除操作。當訪問量大或者長時間不清理general_log檔案時,會佔用大量的儲存空間,導致儲存空間耗盡。您可以通過如下方法確認general_log檔案大小。

    1. 查看執行個體儲存空間使用量,判斷sys_data_size檔案是否過大。詳情請參見查看監控資訊

    2. 查看執行個體是否已開啟general_log(運行參數值為ON)。詳情請參見查看執行個體參數

    3. 串連RDS MySQL執行個體並執行如下語句,查詢general_log檔案大小。串連執行個體的詳細請參見串連RDS MySQL執行個體

      SELECT table_schema AS '資料庫', table_name,SUM(data_length + index_length + data_free)/1024/1024 AS "表大小MB",SUM(DATA_FREE)/1024/1024 AS "片段大小MB"
      FROM information_schema.TABLES
      WHERE table_name='general_log'
      說明
      • 此SQL語句會從information_schema 資料庫的TABLES表中檢索mysql.general_log表的資料,然後將其轉換成以MB為單位的大小。

      • 此SQL語句獲得的資料為抽樣資料,和實際資料存在一定誤差。

解決辦法

執行以下步驟,定位問題並按照對應的解決方案處理:

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中單擊監控與警示,查看佔用儲存空間的檔案類型。詳情請參見查看監控資訊

  3. 選擇對應的解決方案:

    說明

    清理磁碟空間後,需要耐心等待一段時間(5~15分鐘左右),RDS執行個體才會解鎖。