Amazon RDS for SQL Server DB インスタンスのストレージ消費を最適化する方法を教えてください。

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server DB インスタンスが想定を超える容量を使用しているため、ディスクストレージを最適化したいです。

簡単な説明

Amazon CloudWatch の FreeStorageSpace メトリクスを使用すると、DB インスタンスで使用可能なストレージ容量を監視できます。FreeStorageSpace メトリクスは、SQL Server エンジンがどのように使用可能なストレージを使用しているかは示しません。このメトリクスを頻繁に監視し、ストレージの自動スケーリングを有効にすることで、ストレージ不足を防ぎます。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Amazon RDS for SQL Server インスタンスが Storage Full 状態である

Amazon RDS インスタンスが Storage Full 状態で止まっている間は、基本的な操作を実行できません。詳細については、「Amazon RDS DB インスタンスのストレージが不足したときに発生する問題を解決する方法を教えてください」を参照してください。

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

DB インスタンスの有効なストレージオプションを確認するには、describe-valid-db-instance-modifications コマンドを実行します。

describe-valid-db-instance-modifications

注: ストレージのスケーリングとストレージの自動スケーリングは、マグネティックストレージを使用する RDS for SQL Server インスタンスではサポートされません

ストレージの自動スケーリングが有効になっているインスタンスでは、特定のシナリオでのみストレージを拡張できます。詳細については、「Amazon RDS ストレージの自動スケーリングで容量を自動管理する」を参照してください。なお、最大ストレージのしきい値がストレージの増加量未満である場合のみ、ストレージを拡張できます。詳細については、「制限事項」を参照してください。

RDS for SQL Server インスタンスのストレージ消費

RDS for 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 を含むファイルは処理中のトランザクションを表します。

詳細については、Microsoft のウェブサイトで sys.master_files (Transact-SQL) について参照してください。

注: 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)

トランザクションログに空き領域が表示される場合があります。余分な空きスペースの割り当てを解除するには、DBCC SHRINKFILE コマンドを実行します。詳細については、Microsoft のウェブサイトで DBCC SHRINKFILE (Transact-SQL) について参照してください。

トランザクションログに割り当てられる過剰な空き領域を削減するには、ALTER DATABASE (Transact-SQL) ファイルおよびファイルグループオプションを使用します。このオプションは、データベースの自動拡張設定を構成します。詳細については、Microsoft のウェブサイトで「ALTER DATABASE (Transact-SQL) の File および Filegroup オプション」を参照してください。

一時データベース (tempdb)

SQL サーバーの tempdb は自動的に拡張されます。tempdb が使用可能なストレージを大量に消費している場合は、tempdb データベースを圧縮します。

注: tempdb データベースを圧縮する場合は、コマンドを実行した後に SQL Server Management Studio (SSMS) の [メッセージ] タブでエラーメッセージを確認してください。

"DBCC SHRINKFILE: ページが作業テーブルページであるため、移動できませんでした" というエラーメッセージが表示された場合は、Microsoft のウェブサイトで DBCC FREESYSTEMCACHE (Transact-SQL) および DBCC FREEPROCCACHE (Transact-SQL) について参照してください。DB インスタンスを再起動して tempdb をクリアすることもできます。

Storage Full 状態の DB インスタンスは、再起動に失敗することがあります。このような場合は、DB インスタンスに割り当てるストレージを増やしてから、再起動を試してください。詳細については、「Amazon RDS DB インスタンスのストレージが不足したときに発生する問題を解決する方法を教えてください」を参照してください。

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

使用可能なストレージの多くをインデックス専用にする場合は、インデックスを調整することでスペースを節約できる可能性があります。インデックスの使用状況に関する情報を取得するには、sys.dm_db_index_usage_stats 動的管理ビューを実行します。チューニングの優先順位を評価するうえで参考になります。詳細については、Microsoft のウェブサイトで sys.dm_db_index_usage_stats (Transact-SQL) について参照してください。

トレースファイル

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

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

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

CDC

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

監査

インスタンスの監査が正しく構成されていないと、ログが急激に増加してストレージが影響を受ける可能性があります。詳細については、「SQL Server Audit」を参照してください。

C2 監査モードでは、大量のイベント情報がログファイルに保存されます。ログファイルが急増し、インスタンスが Storage Full 状態になる場合があります。詳細については、Microsoft のウェブサイトで「C2 監査モード (サーバー構成オプション)」を参照してください。

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

関連情報

Amazon RDS for Microsoft SQL Server

Amazon RDS インスタンスのメトリクスを監視する

Amazon RDS DB インスタンスが容量を使い果たしている

Microsoft SQL Server データベースを AWS クラウドに移行する

コメントはありません