このトピックでは、ApsaraDB RDS for SQL Serverインスタンスのストレージ容量不足の問題をトラブルシューティングする方法について説明します。 ストレージ使用量は、RDSインスタンスのパフォーマンスを測定するために使用される重要な指標です。 使用可能なストレージ容量が不十分な場合、RDSインスタンスに重大な問題が発生する可能性があります。 たとえば、データの書き込みやバックアップが失敗し、ストレージスケーリングタスクに必要な時間が異常に長くなります。
ストレージ使用量の表示
ApsaraDB RDSコンソールにログインし、[基本情報] ページに移動します。 ページの使用状況統計セクションで、RDSインスタンスの全体的なストレージ使用状況を表示します。 使用状況統計セクションでは、さまざまなデータ型の現在または過去のストレージ使用状況は提供されません。
ApsaraDB RDSコンソールにログインし、[モニタリングとアラート] ページに移動します。 ページの [レガシーモニタリング] タブで、[リソースモニタリング] をクリックします。 次に、さまざまなデータ型の現在および過去のストレージ使用量を表示します。
説明[その他のシステムファイルサイズ] メトリックは、master、msdb、およびmodelシステムデータベースの一部のシステムファイルとすべてのデータファイルおよびログファイルで使用されるストレージ容量を示します。 これらのシステムファイルには、エラーログファイル、デフォルトのトレースファイル、およびシステム拡張イベントファイルが含まれます。
ApsaraDB RDSコンソールにログインし、自律型サービス (CloudDBA) > 空間の管理を選択します。 次に、RDSインスタンスのストレージ使用状況を表示します。 ストレージ使用量には、使用済みデータストレージスペースと使用済みログストレージスペースの割合、ストレージ消費の傾向、最大のストレージスペースを消費する上位10のデータベースと上位20のデータテーブルのそれぞれのストレージ消費量が含まれます。 詳細については、「ApsaraDB RDS For SQL Serverインスタンスのストレージ情報の表示」をご参照ください。
説明RDSインスタンスは、クラウドディスクでSQL Server 2008 R2を実行しません。
SQL Server Management Studio (SSMS) などのクライアントツールを使用して、RDSインスタンスのストレージ使用状況を表示します。
次の表に、RDSインスタンスのストレージ使用量のクエリに使用できるシステムビューとコマンドを示します。
システムビューまたはコマンド
説明
sp_helpdb
各データベースの総ストレージ容量を照会するために使用されます。 データベースの総ストレージ容量は、データベース内のデータファイルとログファイルの合計サイズに等しくなります。
sp_spaceused
ログオンしているデータベースの名前、使用済みストレージスペース、および未割り当てストレージスペースを照会するために使用されます。
DBCC SQLPERF(LOGSPACE)
各データベースの合計ログストレージスペースと使用済みログストレージスペースを照会するために使用されます。
DBCC SHOWFILESTATS
ログオンしているデータベースの合計データストレージ容量と使用済みデータストレージ容量を照会するために使用されます。
select * from sys.master_files
各データベースのデータファイルの合計サイズとログファイルの合計サイズを照会するために使用します。
select * from sys.dm_db_log_space_usage
ログオンしているデータベースの合計ログストレージ容量と使用済みログストレージ容量を照会するために使用されます。
説明このコマンドは、RDSインスタンスがSQL Server 2012以降を実行している場合にのみサポートされます。
select * from sys.dm_db_file_space_usage
ログオンしているデータベースの合計データストレージ容量と使用済みデータストレージ容量を照会するために使用されます。
説明このコマンドは、RDSインスタンスがSQL Server 2012以降を実行している場合にのみサポートされます。
RDSインスタンスのストレージ使用率が異常に高い場合は、ApsaraDB RDSコンソールにログインし、[モニタリングとアラート] ページに移動します。 データファイル、ログファイル、一時ファイル、およびシステムファイルのストレージ使用量を表示して、異常に増加したストレージ容量を消費するファイルの種類を特定します。 次に、提案されたソリューションを使用してストレージスペースを解放したり、ストレージ消費量の異常な増加を防ぐことができるかどうかを評価します。
ストレージ分析と推奨ソリューションの詳細については、次のセクションを参照してください。
データストレージ容量の再利用
分析
データファイルの総サイズに等しい総データ記憶空間は、割り当てられたデータ記憶空間と未割り当てのデータ記憶空間とからなる。
割り当てられたデータ記憶空間は、使用済みデータ記憶空間と未使用データ記憶空間とからなる。 未使用のデータストレージスペースは、同じテーブルまたはインデックス内の新しいレコードにのみ割り当てることができます。 未使用のデータ記憶空間は、他のデータベースオブジェクトに直接割り当てることはできない。
未割り当てデータ記憶空間は、完全には割り当てられていないエクステントからなる。 各エクステントは、64 KBの連続ストレージスペースを提供します。 未割り当てのデータストレージスペースは、データベースオブジェクトに関連付けられていません。 データファイルを圧縮して、未割り当てのデータストレージ領域を解放できます。
解決策
ほとんどの場合、データの量が増え続けると、未割り当てのデータストレージ領域は小さくなります。 この場合、データファイルを圧縮して未割り当ての大量のデータストレージ領域を再利用することはできません。 データファイルを圧縮する前に、割り当てられたデータストレージ領域を最適化および再利用することを推奨します。
次のいずれかの方法を使用して、データストレージ領域を再利用できます。
アーカイブデータファイル
頻繁に照会されない履歴データファイルを削除するか、これらのデータファイルを他のRDSインスタンスに移行するか、これらのデータファイルをアーカイブします。 これにより、RDSインスタンスに保存されるデータ量が削減されます。
この方法は、データストレージ消費量の増加を緩和するのに有効である。 ただし、このメソッドには、データベースオブジェクト構造とアプリケーションのロジックに関する要件があります。 さらに、この方法では、アプリケーション設計者や開発者との協力が必要です。
データファイルの圧縮
RDSインスタンスがSQL Server 2016以降を実行している場合、またはRDS Enterprise Editionで2016より前のバージョンのSQL Serverを実行している場合、データ圧縮機能が提供されます。 この機能は、行圧縮とページ圧縮をサポートします。 この機能は、個々のテーブル、インデックス、またはエクステントで有効にできます。 詳細については、「データ圧縮」をご参照ください。
データ圧縮率は10% 〜90% の範囲で、スキーマ、列データ型、数値の分布によって異なります。 SQL Serverには、専用のストアドプロシージャsp_estimate_data_compressionがあります。 この専用ストアドプロシージャは、指定されたテーブルまたはインデックスでデータ圧縮機能を有効にすることで節約できるデータストレージ容量を評価するために使用されます。
説明テーブルまたはインデックスの圧縮オプション設定を変更するには、データ定義言語 (DDL) 操作を実行する必要があります。 これらの操作を大きなテーブルで実行すると、テーブルが長期間ロックされる可能性があります。 テーブルのロックにより、ワークロードが中断される可能性があります。 オフピーク時に圧縮オプションの設定を変更することを推奨します。
RDSインスタンスがRDS Enterprise EditionでSQL Serverを実行している場合、ONLINEパラメーターをonに設定できます。 次に、DDL操作を実行して圧縮オプションの設定を変更できます。 これらのDDL操作はワークロードを中断しません。
データ圧縮はCPUオーバーヘッドを増加させる。 したがって、ビジネス要件に基づいて、RDSインスタンスでのデータ圧縮の実現可能性を評価する必要があります。 大きなテーブルでのみデータ圧縮機能を有効にすることを推奨します。
デフラグメントインデックス
インデックスの断片化の程度が高い場合、インデックスの基礎となるデータは、異常に大量のストレージスペースを消費します。 この場合、インデックスを最適化して、使用されるデータストレージ容量を減らすことができます。
ApsaraDB RDSコンソールにログインし、自律型サービス (CloudDBA)を選択します。 次に、[インデックスの使用状況] タブをクリックします。 このタブでは、さまざまなテーブルのインデックスの断片化を表示できます。 さらに、自律サービスによって提案された提案を表示して、インデックスを再構築または再編成できます。
インデックスの再構築
この方法は、断片化の程度が高い場合に適しています。 デフォルトでは、インデックスを再構築すると、インデックスが作成されたテーブルは再構築プロセス中にロックされます。 RDSインスタンスがRDS Enterprise EditionでSQL Serverを実行している場合、ONLINEパラメーターをonに設定できます。 これは、テーブルの長期ロックを防ぐのに役立ちます。
インデックスの再編成
この方法は、断片化の程度が低い場合に適している。 しかしながら、最適化効果は、インデックス再構築方法の最適化効果ほど良くはない。
インデックス内の断片化の程度は、論理順序がインデックス内の物理順序と一致しないページの割合を表します。 この割合は、インデックスページの空きストレージスペースの割合とは異なります。 通常の場合、断片化の程度が高いインデックスは、ストレージスペースを再利用するためにデフラグメントされる可能性があります。
インデックスの1ページあたりのアイドルストレージ容量の平均パーセンテージを分析する場合は、SAMPLEDまたは詳細モードでsys.dm_db_index_physical_statsシステムビューを照会できます。 次に、返された結果のavg_page_space_used_in_percent列の値を表示できます。 詳細については、「sys.dm_db_index_physical_stats (Transact-SQL) 」をご参照ください。
説明ApsaraDB RDSは、クエリ中に多数のインデックスページを読み取る必要があります。 クエリ中にインデックスを最適化すると、RDSインスタンスのパフォーマンスが低下する可能性があります。 オフピーク時にインデックスを最適化することを推奨します。
インデックスの最適化は、低い頻度で更新されるアーカイブされたデータテーブルにのみ適しています。 頻繁な挿入および更新操作がデータテーブルに対して実行されると、データテーブルのインデックスの断片化の程度が大幅に増加します。 また、データテーブルのインデックスを再構築または再編成すると、大量のトランザクションログが生成されます。 これにより、使用されるログストレージ容量が増加します。
提案されたすべてのソリューションを試した後、使用可能なストレージ容量がまだ不十分な場合は、DBCC SHRINKFILE
コマンドを実行してデータファイルを圧縮できます。 このようにして、割り当てられていないデータ記憶空間がオペレーティングシステムに解放される。
上の図では、エクステントあたりのサイズは64 KBです。 したがって、総データ記憶空間は104,584 MBであり、割り当てられたデータ記憶空間は82,089 MBである。 この場合、圧縮データファイルの合計サイズは82,089 MB以上となる。 合計データストレージ容量を90,000 MBに削減するには、次のコマンドを実行します。
DBCC SHRINKFILE(1, 90000)
詳細については、「データベースの縮小」および「DBCC SHRINKFILE (Transact-SQL) 」をご参照ください。
ログストレージ容量の再利用
DBCC SQLPERF(LOGSPACE)
コマンドを実行するか、自律性サービスを使用して、使用済みのログストレージ容量の割合を表示します。 割合が高い場合、ログファイルを圧縮して解放できるストレージ容量は少なくなります。 この場合、sys.databasesシステムビューを照会できます。 次に、返された結果のlog_reuse_wait列とlog_reuse_wait_desc列の値を表示できます。 これらの値は、ログストレージスペースを再利用できない理由に関する詳細情報を提供します。
log_reuse_waitおよびlog_reuse_wait_desc列の値の詳細については、「sys.databases (Transact-SQL) 」をご参照ください。
ほとんどの場合、ログファイルを手動で圧縮する必要はありません。 ApsaraDB RDSは、自動バックアップが完了するたびにログファイルを圧縮します。 できるだけ早くログファイルを圧縮して使用するログストレージスペースを削減する必要がある場合は、次の手順を実行できます。ApsaraDB RDSコンソールにログインし、[バックアップと復元] ページに移動します。 ページの上部で、[トランザクションログの縮小] をクリックします。 その後、ApsaraDB RDSはすべてのトランザクションログのバックアップとログファイルの圧縮を開始します。 たとえば、ログストレージ消費量の増加によりRDSインスタンスの使用可能なストレージ容量が異常に少なく、次の自動バックアップまで待つことができない場合は、次の手順を実行できます。
ApsaraDB RDSは、トランザクションログのバックアップが完了した後にのみ、ログファイルの圧縮を開始します。 ApsaraDB RDSが多数のトランザクションログをバックアップする必要がある場合、ApsaraDB RDSが圧縮を完了するまで長時間待つ必要があります。
一時的なファイルストレージ領域を再利用する
分析
一時ファイルストレージスペースは、tempdbシステムデータベースで使用されるストレージスペースの量です。 tempdbシステムデータベースは、SIMPLE回復モデルのみを使用します。 通常、tempdbシステムデータベースのログファイルの合計サイズは小さくなります。 ただし、tempdbシステムデータベースのデータファイルの合計サイズは、短時間で大幅に増加する可能性があります。 たとえば、大量の一時テーブルを作成したり、大きなテーブルを結合したり、データを並べ替えたりすると、tempdbシステムデータベース内のデータファイルの合計サイズが大きくなります。
解決策
アプリケーションレベルでのストレージ消費の増加を防ぎます。 たとえば、不要な一時テーブルを減らし、大きなテーブルの結合を必要とするクエリを減らし、大きなトランザクションを実行しません。
オフピーク時にRDSインスタンスを再起動します。 再起動後、tempdbシステムデータベースによって使用されるストレージ容量は、インスタンスが作成された時点のサイズに減少します。
システムファイルのストレージ容量を再利用する
分析
システムファイルのストレージスペースは、master、msdb、およびmodelシステムデータベースのファイルと、システムディレクトリの一部のファイルによって使用されるストレージスペースの合計です。 ほとんどの場合、これらのファイルは小さいです。 ただし、次のシナリオでは、これらのファイルは大量のストレージ容量を消費する可能性があります。
多数のエラーログが生成されます。 この場合、エラーログファイルの合計サイズは数GB以上に増加します。
重大な例外が発生すると、メモリダンプファイルが生成されます。
解決策
さまざまなシステムファイルで使用されているストレージ容量を取得できません。
ストレージ容量の拡大
推奨されるすべてのソリューションを試した後も、RDSインスタンスのストレージ使用量がまだ異常に高い場合は、インスタンスのストレージ容量を拡張できます。 詳細については、「ApsaraDB RDS For SQL Serverインスタンスの仕様の変更」をご参照ください。