實(shí)例狀態(tài)顯示“鎖定中”時(shí)如何解決?
本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。
現(xiàn)象說明
實(shí)例基本信息頁(yè)實(shí)例運(yùn)行狀態(tài)為鎖定中。
實(shí)例為鎖定中時(shí),無(wú)法INSERT和UPDATE數(shù)據(jù)。
說明以RDS MySQL 5.6、5.7、8.0中20190815及之后的小版本為例,實(shí)例的鎖定狀態(tài)有以下三種:
LOCK_WRITE_GROWTH:禁止磁盤增長(zhǎng)鎖,一般由于主實(shí)例磁盤滿,禁止會(huì)使磁盤用量上升的操作。DELETE語(yǔ)句會(huì)產(chǎn)生大量binlog,會(huì)導(dǎo)致磁盤用量上升,如需清理數(shù)據(jù),可使用DROP和TRUNCATE語(yǔ)句。
LOCK_READ:禁讀鎖,一般由于只讀實(shí)例磁盤滿,禁止執(zhí)行查詢和寫入。
LOCK_WRITE:禁寫鎖,可能是由于實(shí)例過期、主機(jī)過期(僅MyBase產(chǎn)品有的狀態(tài))、實(shí)例遷移等產(chǎn)生,除LOCK_WRITE_GROWTH限制外,額外禁止了其他數(shù)據(jù)寫入,如DROP和TRUNCATE等。
在實(shí)例鎖定時(shí),執(zhí)行部分SQL語(yǔ)句會(huì)報(bào)
ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement
的錯(cuò)誤提示。對(duì)于RDS MySQL 5.1、5.5所有小版本以及5.6、5.7、8.0中20190815之前的小版本,各種原因?qū)е聦?shí)例一旦被鎖定,鎖定后將無(wú)法進(jìn)行任何操作。
常見原因
實(shí)例存儲(chǔ)空間已滿。
賬號(hào)欠費(fèi)或?qū)嵗狡凇?/p>
實(shí)例存儲(chǔ)空間已滿處理方法
在實(shí)例基本信息頁(yè)左下角查看實(shí)例存儲(chǔ)空間是否已滿。
釋放存儲(chǔ)空間
- 訪問RDS實(shí)例列表,在上方選擇地域,然后單擊目標(biāo)實(shí)例ID。
單擊左側(cè)導(dǎo)航欄的監(jiān)控與報(bào)警,查看實(shí)例各類數(shù)據(jù)占用的磁盤空間信息。
根據(jù)不同數(shù)據(jù)類型,清理對(duì)應(yīng)磁盤空間。
警告數(shù)據(jù)無(wú)價(jià),請(qǐng)您謹(jǐn)慎清理,如非必要,不推薦清理數(shù)據(jù),請(qǐng)采用擴(kuò)容存儲(chǔ)空間方式解除鎖定,如果必須清理,請(qǐng)?jiān)谇謇砬皩?duì)數(shù)據(jù)庫(kù)進(jìn)行備份,避免數(shù)據(jù)丟失。
數(shù)據(jù)文件
數(shù)據(jù)庫(kù)引擎
處理方法
MySQL
通過DMS連接實(shí)例,詳情請(qǐng)參見通過DMS登錄RDS數(shù)據(jù)庫(kù)。
執(zhí)行以下SQL語(yǔ)句,查看數(shù)據(jù)庫(kù)的表大小,確認(rèn)其中可以刪除的歷史數(shù)據(jù)或無(wú)用數(shù)據(jù)。
SELECT TABLE_NAME, concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),'MB') AS DATA FROM information_schema. TABLES WHERE TABLE_SCHEMA = '<數(shù)據(jù)庫(kù)名>' ORDER BY DATA + 0 DESC;
在對(duì)應(yīng)數(shù)據(jù)庫(kù)下使用
DROP TABLE <表名>;
命令清理數(shù)據(jù)。清理后需要耐心等待一段時(shí)間(5分鐘左右),RDS實(shí)例才會(huì)解鎖。
PostgreSQL
通過DMS連接實(shí)例,詳情請(qǐng)參見通過DMS登錄RDS數(shù)據(jù)庫(kù)。
執(zhí)行以下SQL語(yǔ)句,查看數(shù)據(jù)庫(kù)的表大小,確認(rèn)其中可以刪除的歷史數(shù)據(jù)或無(wú)用數(shù)據(jù)。
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;
在對(duì)應(yīng)數(shù)據(jù)庫(kù)下使用
DROP TABLE <表名>;
命令清理數(shù)據(jù)。清理后需要耐心等待一段時(shí)間(5分鐘左右),RDS實(shí)例才會(huì)解鎖。
SQL Server
通過DMS連接實(shí)例,詳情請(qǐng)參見通過DMS登錄RDS數(shù)據(jù)庫(kù)。
執(zhí)行以下SQL語(yǔ)句,查看數(shù)據(jù)庫(kù)的表大小,確認(rèn)其中可以刪除的歷史數(shù)據(jù)或無(wú)用數(shù)據(jù)。
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
在對(duì)應(yīng)數(shù)據(jù)庫(kù)下使用
DROP TABLE <表名>;
命令清理數(shù)據(jù)。清理后需要耐心等待一段時(shí)間(5分鐘左右),RDS實(shí)例才會(huì)解鎖。
日志文件
引擎
處理辦法
MySQL
PostgreSQL
RDS PostgreSQL日志文件不支持手動(dòng)刪除。
您可以通過手動(dòng)刪除非活躍的Replication Slot來(lái)讓RDS PostgreSQL內(nèi)核自動(dòng)清理WAL日志。具體方法,請(qǐng)參見WAL日志管理。
SQL Server
RDS SQL Server日志文件不支持手動(dòng)刪除。
臨時(shí)文件:RDS MySQL臨時(shí)文件導(dǎo)致實(shí)例磁盤空間滿且出現(xiàn)“鎖定中”狀態(tài)。
系統(tǒng)文件:系統(tǒng)文件不支持清理。
擴(kuò)容存儲(chǔ)空間
- 訪問RDS實(shí)例列表,在上方選擇地域,然后單擊目標(biāo)實(shí)例ID。
在基本信息頁(yè)面的配置信息區(qū)域單擊變更配置。
擴(kuò)容實(shí)例存儲(chǔ)空間,更多信息,請(qǐng)參見變更配置。
完成支付后,在實(shí)例基本信息頁(yè)右上角單擊按鈕頁(yè)面跳轉(zhuǎn)至任務(wù)列表頁(yè)面查看變配進(jìn)度。
擴(kuò)容時(shí)長(zhǎng)與存儲(chǔ)類型相關(guān),具體如下:
存儲(chǔ)類型
擴(kuò)容時(shí)長(zhǎng)
說明
本地盤
以實(shí)際情況為準(zhǔn)。
本地?zé)o資源可用的情況下會(huì)觸發(fā)跨機(jī)遷移,擴(kuò)容時(shí)長(zhǎng)受較多因素影響,推薦在業(yè)務(wù)低峰期進(jìn)行擴(kuò)容。
變配會(huì)出現(xiàn)約30秒的閃斷,請(qǐng)?jiān)跇I(yè)務(wù)低峰期進(jìn)行變配,并確保您的應(yīng)用有自動(dòng)重連機(jī)制。閃斷期間,與數(shù)據(jù)庫(kù)、賬號(hào)、網(wǎng)絡(luò)等相關(guān)的大部分操作都無(wú)法執(zhí)行。
云盤
5分鐘左右。
MySQL、PostgreSQL云盤實(shí)例擴(kuò)容期間不會(huì)發(fā)生業(yè)務(wù)閃斷。
SQL Server云盤實(shí)例擴(kuò)容期間會(huì)出現(xiàn)一次約30秒的閃斷,而且與數(shù)據(jù)庫(kù)、賬號(hào)、網(wǎng)絡(luò)等相關(guān)的大部分操作都無(wú)法執(zhí)行,請(qǐng)盡量在業(yè)務(wù)低峰期執(zhí)行變配操作,或確保您的應(yīng)用有自動(dòng)重連機(jī)制。
賬號(hào)欠費(fèi)或?qū)嵗狡谔幚矸椒?/h2>包年包月:如果實(shí)例已到期且未續(xù)費(fèi),為實(shí)例續(xù)費(fèi)后,等待5分鐘查看實(shí)例狀態(tài)是否為運(yùn)行中。續(xù)費(fèi)操作具體請(qǐng)參見手動(dòng)續(xù)費(fèi)。
按量付費(fèi):如果賬號(hào)已欠費(fèi),為賬號(hào)充值后,等待5分鐘查看實(shí)例狀態(tài)是否為運(yùn)行中。
包年包月:如果實(shí)例已到期且未續(xù)費(fèi),為實(shí)例續(xù)費(fèi)后,等待5分鐘查看實(shí)例狀態(tài)是否為運(yùn)行中。續(xù)費(fèi)操作具體請(qǐng)參見手動(dòng)續(xù)費(fèi)。
按量付費(fèi):如果賬號(hào)已欠費(fèi),為賬號(hào)充值后,等待5分鐘查看實(shí)例狀態(tài)是否為運(yùn)行中。
更多運(yùn)維建議
建議您配置如下內(nèi)容,避免實(shí)例被鎖定。
設(shè)置實(shí)例到期欠費(fèi)預(yù)警提醒通知。
單擊頁(yè)面右上方的圖標(biāo),進(jìn)入消息中心頁(yè)面。
在左側(cè)導(dǎo)航欄,單擊基本接收管理。
在基本接收管理頁(yè)面的消息類型中勾選產(chǎn)品的欠費(fèi)、停服、即將釋放相關(guān)信息通知,單擊修改。
在修改消息接收人對(duì)話框, 勾選需通知的聯(lián)系人,單擊保存,即可完成設(shè)置。
設(shè)置實(shí)例存儲(chǔ)空間報(bào)警,建議設(shè)置存儲(chǔ)空間大于90%時(shí)報(bào)警。具體操作請(qǐng)參見管理報(bào)警。
開啟SQL洞察與審計(jì),當(dāng)存儲(chǔ)空間突增時(shí),結(jié)合監(jiān)控與報(bào)警,查詢存儲(chǔ)空間增長(zhǎng)期間的歷史SQL語(yǔ)句,對(duì)SQL進(jìn)行優(yōu)化。SQL審計(jì)的更多信息,請(qǐng)參見SQL洞察和審計(jì)。
設(shè)置自動(dòng)擴(kuò)容存儲(chǔ)空間,當(dāng)資源不足時(shí),系統(tǒng)將自動(dòng)擴(kuò)容。詳情請(qǐng)參見設(shè)置RDS MySQL存儲(chǔ)空間自動(dòng)擴(kuò)容和設(shè)置RDS PostgreSQL存儲(chǔ)空間自動(dòng)擴(kuò)容。
對(duì)于臨時(shí)文件較大的場(chǎng)景,應(yīng)優(yōu)化SQL語(yǔ)句,避免頻繁使用ORDER BY、GROUP BY操作。
實(shí)例已經(jīng)有充足空間或者已續(xù)費(fèi),為什么實(shí)例仍然被鎖定?
因?yàn)閷?shí)例當(dāng)前有任務(wù)(如變更配置)在運(yùn)行,需要等待任務(wù)結(jié)束后才會(huì)自動(dòng)解鎖。您可以在實(shí)例基本信息頁(yè)右上角單擊按鈕頁(yè)面跳轉(zhuǎn)至任務(wù)列表頁(yè)面查看任務(wù)進(jìn)度。
實(shí)例顯示“鎖定中”,此時(shí)是否可以升降配?
只有實(shí)例因磁盤滿導(dǎo)致的鎖定可以升降配,欠費(fèi)導(dǎo)致的鎖定只能先續(xù)費(fèi)后再升降配。
待解鎖的實(shí)例是歷史規(guī)格,如何通過擴(kuò)容存儲(chǔ)空間的方式解鎖?
先將實(shí)例規(guī)格變更為在售實(shí)例規(guī)格,然后再擴(kuò)容實(shí)例的存儲(chǔ)空間。在售的實(shí)例規(guī)格,請(qǐng)參見主實(shí)例規(guī)格列表。