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

最終更新日: 2020 年 9 月 22 日

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

解決方法

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 動的管理ビューを実行すると、インデックスの使用状況に関する詳細情報を収集できます。これは、チューニングの優先順位を評価するのに役立ちます。

トレースファイル

C2 Audit Trace ファイルやダンプファイルを含むトレースファイルは、多くのディスク容量を消費する可能性があります。Amazon RDS は、7 日以上経過したトレースファイルとダンプファイルを自動的に削除しますが、トレースファイルの保持設定を調整することもできます。詳細については、「 トレースファイルおよびダンプファイルの操作」を参照してください。

Amazon S3 統合によって消費される容量

RDS DB インスタンスを Amazon S3 と統合している場合は、容量を占有している D: ドライブにファイルをアップロードしている可能性があります。S3 統合で消費されている容量を確認するには、DB インスタンス上のファイルを一覧表示するコマンドを実行します。詳細については、「 Amazon S3 で Amazon RDS を SQL Server DB インスタンス に統合」を参照してください。


この記事は役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?