本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
現象說明
實例基本信息頁實例運行狀態為鎖定中。
實例為鎖定中時,無法INSERT和UPDATE數據。
說明以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之前的小版本,各種原因導致實例一旦被鎖定,鎖定后將無法進行任何操作。
常見原因
實例存儲空間已滿。
賬號欠費或實例到期。
實例存儲空間已滿處理方法
在實例基本信息頁左下角查看實例存儲空間是否已滿。
釋放存儲空間
- 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
單擊左側導航欄的監控與報警,查看實例各類數據占用的磁盤空間信息。
根據不同數據類型,清理對應磁盤空間。
警告數據無價,請您謹慎清理,如非必要,不推薦清理數據,請采用擴容存儲空間方式解除鎖定,如果必須清理,請在清理前對數據庫進行備份,避免數據丟失。
數據文件
數據庫引擎
處理方法
MySQL
通過DMS連接實例,詳情請參見通過DMS登錄RDS數據庫。
執行以下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;
在對應數據庫下使用
DROP TABLE <表名>;
命令清理數據。清理后需要耐心等待一段時間(5分鐘左右),RDS實例才會解鎖。
PostgreSQL
通過DMS連接實例,詳情請參見通過DMS登錄RDS數據庫。
執行以下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;
在對應數據庫下使用
DROP TABLE <表名>;
命令清理數據。清理后需要耐心等待一段時間(5分鐘左右),RDS實例才會解鎖。
SQL Server
通過DMS連接實例,詳情請參見通過DMS登錄RDS數據庫。
執行以下SQL語句,查看數據庫的表大小,確認其中可以刪除的歷史數據或無用數據。
SELECT t.NAME AS TableName, CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE 1=1 AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY t.Name
在對應數據庫下使用
DROP TABLE <表名>;
命令清理數據。清理后需要耐心等待一段時間(5分鐘左右),RDS實例才會解鎖。
日志文件
引擎
處理辦法
MySQL
PostgreSQL
RDS PostgreSQL日志文件不支持手動刪除。
您可以通過手動刪除非活躍的Replication Slot來讓RDS PostgreSQL內核自動清理WAL日志。具體方法,請參見WAL日志管理。
SQL Server
RDS SQL Server日志文件不支持手動刪除。
系統文件:系統文件不支持清理。
擴容存儲空間
- 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在基本信息頁面的配置信息區域單擊變更配置。
擴容實例存儲空間,更多信息,請參見變更配置。
完成支付后,在實例基本信息頁右上角單擊按鈕頁面跳轉至任務列表頁面查看變配進度。
擴容時長與存儲類型相關,具體如下:
存儲類型
擴容時長
說明
本地盤
以實際情況為準。
本地無資源可用的情況下會觸發跨機遷移,擴容時長受較多因素影響,推薦在業務低峰期進行擴容。
變配會出現約30秒的閃斷,請在業務低峰期進行變配,并確保您的應用有自動重連機制。閃斷期間,與數據庫、賬號、網絡等相關的大部分操作都無法執行。
云盤
5分鐘左右。
MySQL、PostgreSQL云盤實例擴容期間不會發生業務閃斷。
SQL Server云盤實例擴容期間會出現一次約30秒的閃斷,而且與數據庫、賬號、網絡等相關的大部分操作都無法執行,請盡量在業務低峰期執行變配操作,或確保您的應用有自動重連機制。
賬號欠費或實例到期處理方法
更多運維建議
建議您配置如下內容,避免實例被鎖定。
設置實例到期欠費預警提醒通知。
訪問RDS管理控制臺。
單擊頁面右上方的圖標,進入消息中心頁面。
在左側導航欄,單擊基本接收管理。
在基本接收管理頁面的消息類型中勾選產品的欠費、停服、即將釋放相關信息通知,單擊修改。
在修改消息接收人對話框, 勾選需通知的聯系人,單擊保存,即可完成設置。
設置實例存儲空間報警,建議設置存儲空間大于90%時報警。具體操作請參見管理報警。
開啟SQL洞察與審計,當存儲空間突增時,結合監控與報警,查詢存儲空間增長期間的歷史SQL語句,對SQL進行優化。SQL審計的更多信息,請參見SQL洞察和審計。
設置自動擴容存儲空間,當資源不足時,系統將自動擴容。詳情請參見設置RDS MySQL存儲空間自動擴容和設置RDS PostgreSQL存儲空間自動擴容。
對于臨時文件較大的場景,應優化SQL語句,避免頻繁使用ORDER BY、GROUP BY操作。
實例已經有充足空間或者已續費,為什么實例仍然被鎖定?
因為實例當前有任務(如變更配置)在運行,需要等待任務結束后才會自動解鎖。您可以在實例基本信息頁右上角單擊按鈕頁面跳轉至任務列表頁面查看任務進度。
實例顯示“鎖定中”,此時是否可以升降配?
只有實例因磁盤滿導致的鎖定可以升降配,欠費導致的鎖定只能先續費后再升降配。
待解鎖的實例是歷史規格,如何通過擴容存儲空間的方式解鎖?
先將實例規格變更為在售實例規格,然后再擴容實例的存儲空間。在售的實例規格,請參見主實例規格列表。