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

最終更新日: 2022 年 10 月 17 日

Microsoft SQL Server DB 向け Amazon Relational Database Service (Amazon RDS) インスタンスが想定を超える容量を使用しています。このような問題が発生しているのはなぜですか? ディスクストレージはどのように最適化できますか?

簡単な説明

Amazon CloudWatch の FreeStorageSpace メトリクスを使用して、DB インスタンスの利用可能なストレージ領域をモニタリングできます。このメトリクスを頻繁にモニタリングし、ストレージの自動スケーリングをオンにすると、インスタンスがストレージを使い果たすのを防ぐことができます (Storage Full 状態)。

ただし、FreeStorageSpace メトリクスは、SQL Server エンジンが使用可能なストレージをどのように消費しているかを示しているわけではありません。

解決方法

Amazon RDS for SQL Server インスタンスがストレージ満杯の状態になっている

RDS インスタンスがストレージ満杯の状態で止まっていると、基本的な操作を実行できません。詳細については、「Amazon RDS DB インスタンスがストレージ不足になったときに発生する問題を解決するには、どうすればよいですか?」を参照してください。

一部の RDS for SQL Server DB インスタンスには、ストレージの変更に制限があります。Amazon RDS コンソールで、DB インスタンスを変更できない場合、[Allocated storage] (割り当てられたストレージ) オプションは無効になります。変更オプションが使用できないときにインスタンスのストレージをスケーリングするには、ネイティブバックアップを使用してデータを移行し、新しいインスタンスに復元します。新しいインスタンスにプロビジョンド IOPS または汎用 (SSD) ストレージタイプがあることを確認します。または、データ移行ツールを使用して新しいインスタンスに移行します。詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。

DB インスタンスの有効なストレージオプションを返すには、次の AWS コマンドラインインターフェイス (AWS CLI) コマンドを使用します。

describe-valid-db-instance-modifications

注: 磁気ストレージを使用する RDS for SQL Server インスタンスでは、ストレージのスケーリングとストレージの自動スケーリングはサポートされていません

ストレージの自動スケーリングがオンになっているインスタンスの場合、ストレージは特定のシナリオでのみ拡張されます。詳細については、「mazon RDS ストレージの自動スケーリングによる容量の自動管理」を参照してください。また、ストレージは、最大ストレージ閾値がストレージ増分と同じか、それを超えない場合にのみ拡張されます。詳細については、「制限事項」を参照してください。

RDS for 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) の [Message] (メッセージ) タブからエラーメッセージについて確認してください。DBCC SHRINKFILE: 作業テーブルページであるため、ページを移動できませんでしたというエラーメッセージが表示された場合は、DBCC FREESYSTEMCACHE および DBCC FREEPROCCACHE に関する Microsoft ドキュメントを参照してください。DB インスタンスを再起動して、tempdb をクリアすることもできます。

DB インスタンスのステータスがストレージ満杯である場合、再起動できない場合があります。その場合は、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 インスタンス上のファイルを一覧表示するコマンドを実行します。詳細については、「RDS DB インスタンス上のファイルを一覧表示する」を参照してください。

CDC

CDC が有効になっているデータベースでは、ソーステーブルまたはデータベースへの変更の頻度に応じてログファイルのサイズが大きくなります。最終的にストレージが不足する可能性があります。ログディスクが満杯になると、CDC はそれ以上のトランザクションを処理できなくなります。

監査

例えば、監査が正しく設定されていないと、ログが急激に増加し、ストレージが影響を受ける可能性があります。詳細については、「SQL Server 監査の使用」を参照してください。

C2 監査モードでは、大量のイベント情報がログファイルに保存されます。ログファイルが急速に大きくなり、インスタンスがストレージ満杯状態になる可能性があります。詳細については、Microsoft ドキュメントの「C2 audit mode server configuration option」を参照してください。

さらに、クエリストアなどの機能を有効にすると、リソースの使用率にも影響を与える可能性があります。