Amazon Relational Database Service (Amazon RDS) の SQL Server 上のデータベースインスタンスが、予想よりも多くのスペースを使用しています。その理由と、ディスクストレージを最適化する方法を教えてください。

Amazon CloudWatch の FreeStorageSpace メトリクスを使用すれば、RDS DB インスタンスで利用可能なストレージスペースをモニターできますが、このメトリクスでは 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 を含むファイルはデータを意味しており、LOGS を含むファイルは処理中のトランザクションを表します。

最適化を開始する前に、SQL Server エンジンがストレージをどのように使用しているかを理解しておいてください。SQL Server エンジンのストレージは大まかに以下のカテゴリを使用して定義されています。

データベースファイル

個々のデータベースが使用しているストレージの合計は、次のようなクエリを実行すれば、現在アクティブなデータベースの行、インデックス、空き領域に分類できます。

EXEC sp_spaceused;

トランザクションログファイル

トランザクションログに使用されるストレージの量を調べるには、以下のクエリを実行します。

DBCC SQLPERF(LOGSPACE)

トランザクションログに示されている空き領域は予測できるものですが、DBCC SHRINKFILE (Transact-SQL) に示されている手順に従えば、過剰な空き領域の割り当てを解放することができます。

ALTER DATABASE の File および Filegroup オプション (Transact-SQL) を使って、データベースの自動拡大設定を調整すれば、空き領域の過剰な割り当てを削減することができます。

一時データベース (tempdb)

SQL Server の tempdb は自動的に拡大します。tempdb が利用可能なストレージ内の大きな割合を消費している場合には、「Shrinking the tempdb Database (tempdb データベースを縮小する)」で説明されている指示に従って、縮小することができます。

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

使用可能なストレージの大部分がインデックスに専有されているときは、インデックスのチューニングにより領域をいくらか節約できる場合があります。インデックスの使用状況についての詳細情報は、sys.dm_db_index_usage_stats (Transact-SQL) ダイナミック管理ビューを使って収集できます。これは、チューニングの優先順位を評価する点で役立ちます。


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2015 年 10 月 30 日

更新: 2018 年 4 月 2 日