SQL Server を実行している Amazon RDS DB インスタンスのストレージ消費についてトラブルシューティングする方法を教えてください。

最終更新日: 2019 年 8 月 13 日

SQL Server を実行している Amazon Relational Database Service (Amazon RDS) インスタンスが予想以上のスペースを使用しています。このような問題が発生しているのはなぜですか? ディスクストレージはどのように最適化できますか?

解決方法

FreeStorageSpace Amazon CloudWatch メトリックを使用して、RDS DB インスタンスの利用可能なストレージスペースをモニタリングできます。ただし、そのメトリックは、SQL Server エンジンが使用可能なストレージをどのように消費しているかを示しているわけではありません。

SQL Server DB インスタンスの物理ディスク容量の使用量に関する詳細情報を収集するには、次のようなクエリを実行します。

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 を含むファイルはデータで構成されており、LOGS を含むファイルは処理中のトランザクションを表します。

重要: 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 を受け取った場合: 作業テーブルページのエラーメッセージであるため、ページを移動できませんでした。DBCC FREESYSTEMCACHE および DBCC FREEPROCCACHE の Microsoft ドキュメントを参照してください。DB インスタンスを再起動して、tempdb をクリアすることもできます。DB インスタンスのステータスが Storage Full であり、再起動できない場合、DB インスタンスに割り当てられたストレージを増やしてから再起動できます。詳細については、Amazon RDS DB インスタンスがストレージ不足になったときに発生する問題を解決するには、どうすればよいですか? を参照してください。

データベースインデックス

使用可能なストレージの相当部分がインデックス専用である場合、インデックスのチューニングにより一部容量を節約できることがあります。sys.dm_db_index_usage_stats 動的管理ビューを実行すると、インデックスの使用状況に関する詳細情報を収集できます。これは、チューニングの優先順位を評価するのに役立ちます。