全部產品
Search
文件中心

ApsaraDB RDS:執行個體狀態顯示“鎖定中”時如何解決?

更新時間:Jul 03, 2025

現象說明

  • 執行個體基本資料頁執行個體運行狀態為鎖定中

  • 執行個體為鎖定中時,無法INSERTUPDATE資料。

    說明
    • 以RDS MySQL 5.6、5.7、8.0中20190815及之後的小版本為例,執行個體的鎖定狀態有以下三種:

      • LOCK_WRITE_GROWTH:禁止磁碟增長鎖,一般由於主執行個體磁碟滿,禁止會使磁碟用量上升的操作。DELETE語句會產生大量binlog,會導致磁碟用量上升,如需清理資料,可使用DROP和TRUNCATE語句。

      • LOCK_READ:禁讀鎖,一般由於唯讀執行個體磁碟滿,禁止執行查詢和寫入。

      • LOCK_WRITE:禁寫鎖,可能是由於執行個體到期、主機到期(僅MyBase產品有的狀態)、執行個體遷移等產生,除LOCK_WRITE_GROWTH限制外,額外禁止了其他資料寫入,如DROP和TRUNCATE等。

      在執行個體鎖定時,執行部分SQL語句會報ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement的錯誤提示。

    • 對於RDS MySQL 5.1、5.5所有小版本以及5.6、5.7、8.0中20190815之前的小版本,各種原因導致執行個體一旦被鎖定,鎖定後將無法進行任何操作。

常見原因

  • 執行個體儲存空間已滿。

  • 帳號欠費或執行個體到期。

執行個體儲存空間已滿處理方法

在執行個體基本資料頁查看執行個體儲存空間是否已滿。

image

解決方案

釋放儲存空間

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

  2. 單擊左側導覽列的監控與報警,查看執行個體各類資料佔用的磁碟空間資訊。空間使用量

  3. 根據不同資料庫類型,清理對應磁碟空間。

    警告

    資料無價,請您謹慎清理,如非必要,不推薦清理資料,請採用擴容儲存空間方式解除鎖定;如果必須清理,請在清理前對資料庫進行備份,避免資料丟失。

    • 臨時檔案(標準監控中對應temp_file_size)

      產生原因:MySQL執行個體可能會由於查詢語句的排序、分組、關聯表產生的暫存資料表檔案,或者大事務未提交前產生的binlog cache檔案,導致執行個體磁碟空間滿。

      解決方案:請參見RDS MySQL臨時檔案導致執行個體磁碟空間滿且出現“鎖定中”狀態

    • 記錄檔(標準監控中對應binlog_size和general_log_size)

      產生原因:資料庫管理系統會產生查詢日誌、慢查詢日誌、錯誤記錄檔等,協助管理員監控資料庫的效能和健康情況。

      引擎

      處理辦法

      MySQL

      根據監控與報警中,磁碟空間的佔用資訊,清理對應的記錄檔。

      PostgreSQL

      RDS PostgreSQL記錄檔不支援手動刪除。

      您可以通過手動刪除非活躍的Replication Slot來讓RDS PostgreSQL核心自動清理WAL日誌。具體方法,請參見WAL日誌管理

      SQL Server

      RDS SQL Server記錄檔不支援手動刪除,但可以通過控制台收縮交易記錄

    • 資料檔案(標準監控中對應user_data_size)

      資料庫引擎

      處理方法

      MySQL

      1. 通過DMS串連執行個體

      2. 執行以下SQL語句,查看資料庫的表大小,確認其中可以刪除的歷史資料或無用資料。

        SELECT
            TABLE_NAME,
            concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),'MB') AS DATA
        FROM
            information_schema. TABLES
        WHERE
            TABLE_SCHEMA = '<資料庫名>'
        ORDER BY
            DATA + 0 DESC;
      3. 在對應資料庫下使用DROP TABLE <表名>;命令清理資料。

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

      PostgreSQL

      1. 通過DMS串連執行個體,詳情請參見通過DMS登入RDS資料庫

        說明

        若無法串連執行個體,請首先擴容儲存空間,待擴容完成後再進行相應的磁碟空間清理。清理完成後,根據實際需求選擇是否進行縮容。縮容的相關操作請參見變更配置

      2. 執行以下SQL語句,查看資料庫的表大小,確認其中可以刪除的歷史資料或無用資料。

        SELECT 
            table_schema || '.' || table_name AS table_full_name,
            pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') AS size
        FROM
            information_schema.tables
        ORDER BY
            pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') 
        DESC;
      3. 在對應資料庫下使用DROP TABLE <表名>;命令清理資料。

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

      SQL Server

      請參見RDS SQL Server空間不足問題處理。

    • 系統檔案(標準監控中對應undolog_size)

      產生原因:當存在對InnoDB表長時間不結束的查詢語句,而且在查詢過程中表有大量的資料變化時,系統會產生大量的undo資訊,佔用大量儲存空間,導致儲存空間耗盡。

      解決方案:請參見系統檔案堆積導致空間不足

擴容儲存空間

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

  2. 基本資料頁面的配置資訊地區單擊變更設定擴容執行個體儲存空間

  3. 完成支付後,您可在進入工作中樞查看變更配置進度。

    擴容時間長度與儲存類型相關,具體如下。您可以訪問RDS控制台首頁,在左側導覽列的工作中樞中查看擴容進度。

    儲存類型

    擴容時間長度

    說明

    高效能本地碟

    以實際情況為準。

    • 本地無資源可用的情況下會觸發跨機遷移,擴容時間長度受較多因素影響,推薦在業務低峰期進行擴容。

    • 變更配置會出現約30秒的閃斷,請在業務低峰期進行變更配置,並確保您的應用有自動重連機制。閃斷期間,與資料庫、帳號、網路等相關的大部分操作都無法執行。

    雲端硬碟

    5分鐘左右。

    • MySQL、PostgreSQL雲端硬碟執行個體擴容期間不會發生業務閃斷。

    • SQL Server雲端硬碟執行個體擴容期間可能會出現一次約30秒的閃斷,與資料庫、帳號、網路等相關的大部分操作都無法執行,請盡量在業務低峰期執行變更配置操作,或確保您的應用有自動重連機制。目前部分執行個體已支援無損擴容能力,不會造成資料庫訪問中斷。

帳號欠費或執行個體到期處理方法

  • 訂用帳戶:如果執行個體已到期且未續約,為執行個體續約後,等待5分鐘查看執行個體狀態是否為運行中

  • 隨用隨付:如果帳號已欠費,為帳號儲值後,等待5分鐘查看執行個體狀態是否為執行中

更多營運建議

建議您配置如下內容,避免執行個體被鎖定。

  • 設定執行個體到期欠費預警提醒通知。

    1. 訪問RDS管理主控台

    2. 單擊頁面右上方的通知表徵圖,進入訊息中心頁面。

    3. 在左側導覽列,單擊基本接收管理

    4. 基本接收管理頁面的訊息類型中勾選產品的欠費、停服、即將釋放相關語音總機,單擊修改

    5. 修改訊息接收人對話方塊, 勾選需通知的連絡人,單擊儲存,即可完成設定。

  • 設定執行個體儲存空間警示,建議設定儲存空間大於90%時警示。

  • 開啟SQL洞察與審計,當儲存空間突增時,結合監控與警示,查詢儲存空間增長期間的歷史SQL語句,對SQL進行最佳化。

  • 設定自動擴容儲存空間,當資源不足時,系統將自動擴容。詳情請參見設定RDS MySQL儲存空間自動擴容設定RDS PostgreSQL儲存空間自動擴容設定RDS SQL Server儲存空間自動擴容

  • 對於臨時檔案較大的情境,應最佳化SQL語句,避免頻繁使用ORDER BY、GROUP BY操作。

執行個體已刪除大量資料,為什麼還是LOCK_WRITE_GROWTH?

使用 DELETE 語句刪除資料時,資料庫僅將記錄或資料頁標記為可複用,而不會直接減少磁碟檔案的大小,即資料表空間不會自動回收。若需釋放資料表空間,可使用OPTIMIZE TABLE命令釋放MySQL執行個體的資料表空間

執行個體已經有充足空間或者已續約,為什麼執行個體仍然被鎖定?

因為執行個體當前有任務(如變更配置)在運行,需要等待任務結束後才會自動解鎖。您可以在執行個體基本資料頁右上方單擊按鈕按鈕頁面跳轉至任务列表頁面查看任務進度。

執行個體顯示“鎖定中”,此時是否可以升降配?

只有執行個體因磁碟滿導致的鎖定可以升降配,欠費導致的鎖定只能先續約後再升降配。

待解鎖的執行個體是歷史規格,如何通過擴容儲存空間的方式解鎖?

先將執行個體規格變更為在售執行個體規格,然後再擴容執行個體的儲存空間。在售執行個體規格,請參見主執行個體規格列表

執行個體處於“鎖定中”,為何儲存空間會有所增加?

在“鎖定中”狀態下,無法執行INSERTUPDATE操作。然而,執行個體仍然可能因查詢操作組建記錄檔檔案或其他臨時資料,從而導致儲存空間進一步增加。