我的 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 資料庫執行個體使用的空間超出預期。為什麼會發生此情況?如何最佳化磁碟儲存?
簡短說明
您可以使用 Amazon CloudWatch 中的 FreeStorageSpace 指標來監控資料庫執行個體的可用儲存空間。經常監控此指標並開啟儲存體自動擴展功能,有助於防止執行個體儲存空間用盡 (儲存空間已滿狀態)。
不過,FreeStorageSpace 指標不能說明 SQL Server 引擎如何使用可用儲存空間。
解決方法
處於儲存空間已滿狀態的 Amazon RDS for SQL Server 執行個體
當 RDS 執行個體停留在儲存空間已滿狀態時,您無法執行基本作業。如需詳細資訊,請參閱如何解決 Amazon RDS 資料庫執行個體儲存不足時發生的問題?
某些 RDS for SQL Server 資料庫執行個體對於修改儲存體有限制。如果您的資料庫執行個體不符合修改資格,則 Amazon RDS 主控台中的已配置儲存空間選項會停用。若要在修改選項無法使用時擴展執行個體的儲存空間,請使用原生備份和還原將資料移轉至新的執行個體。確定新執行個體具有佈建 IOPS 或一般用途 (SSD) 儲存類型。或者,使用資料移轉工具移轉至新執行個體。如需詳細資訊,請參閱修改 Amazon RDS 資料庫執行個體。
使用下列 AWS Command Line Interface (AWS CLI) 命令傳回資料庫執行個體的有效儲存選項:
describe-valid-db-instance-modifications
注意: 使用磁性儲存體的 RDS for SQL Server 執行個體不支援擴展儲存和儲存自動擴展。
對於已開啟儲存自動擴展的執行個體,只有在特定情況下才會延伸儲存空間。如需詳細資訊,請參閱使用 Amazon RDS 儲存自動擴展管理容量。此外,只有在最大儲存臨界值不等於或超過儲存體增量時,才會延伸儲存空間。如需詳細資訊,請參閱限制。
RDS for SQL Server 執行個體的儲存空間使用
若要收集關於 SQL Server 資料庫執行個體的實體磁碟空間使用的詳細資訊,請執行類似下列內容的查詢:
SELECT D.name AS [database_name]
, F.name AS [file_name]
, F.type_desc AS [file_type]
, CONVERT(decimal(10,2), F.size * 0.0078125) AS [size_on_disk_mb]
, CONVERT(decimal(10,2), F.max_size * 0.0078125) AS [max_size_mb]
FROM sys.master_files AS F
INNER JOIN sys.databases AS D
ON F.database_id = D.database_id;
包含 ROWS 的檔案由資料組成,而包含 LOG 的檔案則代表進行中交易。
注意: sys.master_files 系統檢視會顯示 tempdb 的起始大小。它不會反映 tempdb 的目前大小。執行下列查詢來檢查 tempdb 的目前大小:
select name AS [database_name],
physical_name AS [file_name],
convert(decimal(10,2),size*0.0078125) AS [size_on_disk_mb]
from tempdb.sys.database_files;
在最佳化儲存體之前,請務必瞭解 SQL Server 引擎如何使用儲存體。SQL Server 引擎儲存體是使用下列類別進行廣泛定義:
資料庫檔案
您可以將個別資料庫使用的總儲存空間細分為目前作用中資料庫中的列、索引和可用空間。為此,請執行類似下列內容的查詢:
EXEC sp_spaceused;
交易記錄檔
若要判斷交易記錄檔使用的儲存空間量,請執行下列查詢:
DBCC SQLPERF(LOGSPACE)
您可以預期交易日誌中的可用空間,但您可以按照Microsoft 文件 DBCC SHRINKFILE 取消配置過多的可用空間。
您可以使用 ALTER DATABASE (transact-SQL) 檔案和檔案群組選項,減少交易日誌的可用空間過多配置。這些選項會設定資料庫的自動擴展設定。
臨時資料庫 (tempdb)
SQL Server tempdb 會自動擴展。如果 tempdb 耗用大量可用儲存空間,您可以壓縮 tempdb 資料庫。
注意: 如果您壓縮 tempdb 資料庫,請於執行命令之後在 SQL Server Management Studio (SSMS) 的訊息標籤檢查是否有錯誤訊息。如果您收到 DBCC SHRINKFILE: 頁面無法移動,因為它是一個工作表頁面錯誤消息,則請參閱 Microsoft 文件 DBCC FREESYSTEMCACHE 和 DBCC FREEPROCCACHE。您也可以重新啟動資料庫執行個體以清除 tempdb。
處於儲存空間已滿狀態的資料庫執行個體可能無法重新啟動。如果發生這種情況,請增加資料庫執行個體配置的儲存空間,然後重新啟動。如需詳細資訊,請參閱如何解決 Amazon RDS 資料庫執行個體儲存不足時發生的問題?
資料庫索引
如果您要將大部分可用儲存空間專用於索引,則可以透過索引調整來節省一些空間。您可以執行 sys.dm_db_index_usage_stats 動態管理檢視,以收集有關索引使用情況的詳細資訊。這可以協助您評估調整優先順序。
追蹤檔
追蹤檔案 (包括 C2 稽核追蹤檔案和傾印檔案) 可能會耗用大量磁碟空間。Amazon RDS 會自動刪除超過 7 天的追蹤和傾印檔案,但您也可以調整追蹤檔案的保留設定。如需詳細資訊,請參閱設定追蹤和傾印檔案的保留期。
Amazon S3 整合消耗的空間
如果您將 RDS 資料庫執行個體與 Amazon S3 整合,可能已將檔案上傳到佔用空間的 D: 磁碟機。若要檢查 S3 整合佔用了多少空間,請執行命令以列出資料庫執行個體上的檔案。如需詳細資訊,請參閱列出 RDS 資料庫執行個體上的檔案。
CDC
對於已開啟 CDC 的資料庫,日誌檔大小會根據來源資料表或資料庫的變更頻率而增加。儲存空間最終可能會耗盡。如果日誌磁碟已滿,則 CDC 無法處理進一步的交易。
稽核
如果未正確設定執行個體的稽核,日誌可能會呈指數級增長,並影響儲存空間。如需詳細資訊,請參閱使用 SQL Server 稽核。
C2 稽核模式會將大量事件資訊儲存至日誌檔。日誌檔可能會快速擴展,使執行個體進入儲存空間已滿狀態。如需詳細資訊,請參閱 Microsoft 文件中的 C2 稽核模式伺服器組態選項。
此外,開啟查詢儲存等功能也可能會影響資源使用率。
相關資訊
Amazon RDS for Microsoft SQL Server
監控 Amazon RDS 執行個體中的指標
Amazon RDS 資料庫執行個體儲存體不足
將 Microsoft SQL Server 資料庫遷移至 AWS Cloud