このトピックでは、ApsaraDB RDS for SQL Serverインスタンスのストレージ容量が不足しているという問題を解決する方法について説明します。
以下の点にご注意ください。
Alibaba Cloudインスタンスの設定やデータの変更などのリスクの高い操作を実行する前に、データのセキュリティを確保するために、インスタンスのディザスタリカバリ機能とフォールトトレランス機能を確認することを推奨します。
ECS (Elastic Compute Service) インスタンスやRDSインスタンスなどのインスタンスの設定またはデータを変更する前に、インスタンスのスナップショットを作成するか、バックアップを有効にすることを推奨します。 たとえば、RDSインスタンスのログバックアップを有効にできます。
Alibaba Cloud管理コンソールで機密情報に対する権限を付与した場合、または機密情報を送信した場合は、できるだけ早い機会に機密情報を変更することを推奨します。 機密情報には、ユーザー名とパスワードが含まれます。
問題の説明
RDSインスタンスのストレージ容量が使い果たされました。
原因
ワークロードが高いと、RDSインスタンスのストレージ容量が消費されます。
ソリューション
ApsaraDB RDS for SQL Serverでは、ファイルの削除後にリリースされるストレージは再利用されます。 ストレージ使用率が高くない場合は、ファイルを縮小してストレージを再利用しないことを選択できます。 ただし、ストレージ容量が使い果たされ、ワークロードが影響を受ける場合は、ストレージを再利用する必要があります。 ほとんどの場合、ログファイルを縮小してストレージを優先的に再利用することをお勧めします。 ログファイルを短時間で圧縮できるためです。 その結果、短時間で十分な保存を解除することができる。 ログファイルを縮小するには、次の手順を実行します。
縮小するログファイルのサイズを確認します。
RDSインスタンスがSQL Server 2012またはSQL Server 2016を実行している場合は、次のSQL文を実行してログファイルのサイズを確認します。
による注文SELECT DB_NAME(database_id) AS [データベース名] 、 [名前] [論理名] として、 [物理名] [物理名] として、 ((サイズ * 8) / 1024) AS [サイズ (MB)] FROM sys.master_files [サイズ (MB)] DESC
RDSインスタンスがSQL Server 2008 R2を実行している場合は、次のSQL文を実行してログファイルのサイズを確認します。
説明すべてのデータベースでSQL文を1つずつ実行する必要があります。
USE [$Database_Name] GO SELEC T a.name AS [$Logic_Name] 、サイズ /128、 FILEPROPERT Y(a.name、「SpaceUsed」)/128、 サイズ /128 - FILEPROPERT Y(a.name、'SpaceUsed')/128、 FILEPROPERT Y(a.name、「SpaceUsed」) * 100.0 /サイズ sys.database_filesから クロス参加 (recovery_model_descを選択し、 log_reuse_wait, log_reuse_wait_desc, is_auto_shrink_on sys.databasesから ここでname=DB_NAME() b WHEREタイプ=1
説明[$Database_Name] は、データベースの名前を指定します。
[$Logic_Name] は、論理ファイルの名前を指定します。
次のSQL文を実行して、ログファイルが縮小できるかどうかを確認します。
SELECT [name], [log_reuse_wait_desc] マスター. sys.databasesから WHERE [name]='[$Database_Name]'
次のSQL文を実行して、ログファイルを圧縮してストレージを再利用します。
DBCC SHRINKFILE([$Logic_Name])
説明サービスの中断を防ぐため、オフピーク時にSQL文を実行することを推奨します。
ログ待機の種類とソリューションの詳細については、「詳細」をご参照ください。
次のSQL文を実行してデータファイルのサイズを表示します。
USE [$Database_Name] GO SELEC T a.name AS [$Logic_Name] 、 サイズ /128、 FILEPROPERT Y(a.name、「SpaceUsed」)/128、 サイズ /128 - FILEPROPERT Y(a.name、'SpaceUsed')/128、 FILEPROPERT Y(a.name、「SpaceUsed」) * 100.0 /サイズ sys.database_filesから クロス参加 (recovery_model_descを選択し、 log_reuse_wait, log_reuse_wait_desc, is_auto_shrink_on sys.databasesから ここでname=DB_NAME() b WHEREタイプ=0
次のSQL文を実行してデータファイルを縮小します。
説明ほとんどの場合、ファイルは5 GBのステップサイズで縮小されます。 操作がワークロードに影響する場合は、操作を停止できます。 ただし、操作はロールバックされません。
DECLARE @ usedspace INT, @ totalspace INT SELECT @ usedspace = xxx、 @ totalspace = yyy @ totalspace > @ usedspace 開始 SET @ totalspace = @ totalspace - 5*1024 DBCC SHRINKFILE([$Logic_Name], @ totalspace) 終了
説明前の手順から、使用ストレージとストレージ容量に関する情報を取得できます。
次のSQL文を実行して、縮小の進行状況を表示します。
説明進捗は推定値です。
SELECT DB_NAME(database_id) AS dbname, session_id, request_id, start_time, percent_complete, dateadd(mi, estimated_completion_time/60000, getdate()) AS ETC FROM sys.dm_exec_requests WHERE percent_complete <> 0
より多くの情報
このセクションでは、一般的なログ待機タイプとソリューションについて説明します。
LOG_BACKUP
ログファイルはバックアップされず、圧縮できません。
ApsaraDB for RDS コンソールにログインします。 インスタンスの詳細ページの左側のナビゲーションウィンドウで、[バックアップと復元] をクリックします。 表示されるページで、[バックアップ設定] タブをクリックします。 次に、パラメーターを設定し、[トランザクションログの縮小] をクリックします。 パラメーター設定の詳細については、「ApsaraDB RDS For SQL Serverインスタンスのバックアップ」をご参照ください。
ACTIVE_TRANSACTION
アクティブなトランザクションはログファイルの縮小をブロックします。 この場合、次の操作を実行します。
次のSQL文を実行して、長期間アクティブなトランザクションのSPIDを取得します。
DBCCオペントラン
次のSQL文の [$SPID] を前の手順で取得したSPIDに置き換え、SQL文を実行して要求されたSQL文を表示し、
kill
コマンドを使用してアクティブなトランザクションを終了できるかどうかを確認します。 アクティブなトランザクションが終了したら、log_reuse_waitの値を表示し、ファイルを縮小します。DBCC INPUTBUFFER([$SPID])
参考資料
ApsaraDB RDS for SQL Serverインスタンスのトランザクションログを縮小するにはどうすればよいですか。
アプリケーションスコープ
ApsaraDB RDS for SQL Server