本文列舉了RDS執行個體有關儲存空間的常見問題供您參考。
儲存空間是否可以直接擴容?是否需要遷移資料?擴容有什麼影響?
儲存空間可以直接擴容,如果執行個體所在主機的儲存空間不夠用,系統會在擁有足夠儲存空間的主機上自動建立主備執行個體,並同步原執行個體資料。
關於如何擴容儲存空間以及擴容是否會閃斷,請參見:
擴容如何計費?
RDS執行個體擴容後計費將會發生變化,具體詳情,請參見變更配置的計費規則。
儲存空間佔用突然升高,如何排查?
RDS執行個體列表頁面,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列中單擊監控與警示,查看執行個體佔用儲存空間的主要檔案類型和變化趨勢。
如何刪除檔案來釋放空間?
為什麼建立的資料庫沒有任何資料,就已經產生了磁碟使用量?
資料庫初始化時,會建立相關的系統資料表用於儲存賬戶、許可權等。此外,資料庫系統的日誌(Redo、Undo等)也會佔用磁碟空間。
為什麼從其它異構資料庫匯入資料,MySQL佔用了更多空間?
不同的資料庫儲存引擎處理資料的方式不同,例如,是否有壓縮功能、在某些欄位上是否有索引等都會影響佔用的儲存空間。
RDS執行個體的儲存空間是否包含備份空間?
在RDS控制台的執行個體基本資料頁面的使用量統計中的儲存空間的統計值,僅為執行個體空間,不含備份空間。備份空間的使用量,請參見備份大小。
RDS執行個體儲存空間佔滿後,會在多長時間內進入“鎖定中”狀態?
RDS執行個體儲存空間佔滿後,執行個體將自動鎖定並進入“鎖定中”狀態。然而,由於巡檢機制的存在,執行個體狀態的改變可能會有一定的延遲。
RDS執行個體一旦被鎖定,將無法進行資料寫入。建議您配置警示,以避免儲存空間佔滿而導致執行個體鎖定的情況發生。同時,您可以設定儲存空間自動擴容,在儲存空間不足時,執行個體會自動擴容儲存空間,具體操作:
RDS MySQL執行個體請參見設定儲存空間自動擴容。
RDS PostgreSQL執行個體請參見設定儲存空間自動擴容。
RDS SQL Server執行個體請參見設定儲存空間自動擴容。
對於RDS MySQL執行個體,您還可以開啟空間片段自動回收,及時清理空間片段,回收儲存空間。
RDS SQL Server執行個體刪除大量資料後,為什麼磁碟空間並沒有減少?
在RDS SQL Server中執行DELETE
操作刪除大量資料後,磁碟空間沒有減少的原因與資料庫管理系統的設計機制和日誌記錄行為有關:
交易記錄記錄:SQL Server為了保證資料的一致性和可恢複性,會對每一次資料操作(包括
DELETE
)進行詳細的日誌記錄。表示即使資料被標記為刪除,相應的日誌條目仍會佔據磁碟空間,可能導致磁碟使用量不減反增。資料頁未釋放:在SQL Server中,資料存放區在資料頁中,當資料被刪除時,這些資料頁並不立即回收,而是被標記為可重用。目的是為了提高後續插入操作的效率,避免頻繁的物理磁碟整理操作。因此,雖然資料被邏輯上刪除,但物理空間並未立即歸還給作業系統。
表和索引片段:刪除資料後,可能會在表和索引中留下空洞,導致儲存空間變得片段化,但這部分空間仍然被資料庫認為是已指派的。
若要實際回收這部分空間,建議採取以下措施:
收縮資料庫或檔案組:使用
DBCC SHRINKDATABASE
或DBCC SHRINKFILE
命令可以嘗試回收未使用的空間並減少資料檔案的大小。重要該過程可能會很耗時,且頻繁收縮可能對效能產生負面影響。更多詳情,請參見解決SQL Server執行個體空間滿自動鎖的問題或RDS SQL Server空間不足問題。
重建索引:刪除大量資料後,索引可能變得片段化,重建索引可以協助整理資料頁,回收空間,同時提高查詢效率。
備份交易記錄:對於使用完整復原模式的資料庫,定期備份交易記錄可以截斷日誌,釋放日誌空間。更多詳情,請參見管理日誌。
考慮TRUNCATE TABLE:
TRUNCATE TABLE
在合適情境下較DELETE
更高效,它會直接釋放資料頁而不產生大量日誌,執行速度更快。重要TRUNCATE
操作無法復原,且不支援帶有WHERE
條件。
綜上,如需實現磁碟空間的有效縮減,需要根據實際情況採取多種措施,以此最佳化資料庫的磁碟空間。