すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ストレージ領域がいっぱいになったときにSQL Serverインスタンスがロックされる問題を解決します。

最終更新日:Jan 17, 2024

説明

SQL文や外部データなどの攻撃により、apsaradb RDS for SQL Serverインスタンスの容量が不足する場合があります。 データ損失を防ぐため、apsaradb RDS for SQL Serverはインスタンスを自動的にロックします。 ディスクがロックされると、書き込み操作は失敗します。 インスタンススペースがいっぱいになったためにインスタンスが自動的にロックされた場合、コンソールに次の情報が表示されます。

原因

SQL Serverインスタンスのフルスペースには、主に3つの理由があります。

  • ログファイルの使用率が高いです。

  • 高いデータファイル使用率

  • 一時ファイルの使用率が高い

解決策

説明

以下の点にご注意ください。

  • インスタンス設定やデータの変更など、リスクのある操作を実行する場合は、インスタンスのディザスタリカバリ機能とフォールトトレランス機能を確認して、データのセキュリティを確保します。

  • ECSおよびRDSインスタンスを含むがこれらに限定されないインスタンスの設定およびデータを変更する前に、スナップショットを作成するか、RDSログバックアップを有効にすることを推奨します。

  • Alibaba Cloud管理コンソールでログオンアカウントやパスワードなどのセキュリティ情報を承認または送信した場合は、そのような情報をタイムリーに変更することを推奨します。

スペース使用量の表示

方法1

RDSコンソールのモニタリングページでスペース使用量を表示します。 詳細については、「リソースとエンジンのモニタリングデータの表示」をご参照ください。

次の表に、命名規則のパラメーターを示します。

項目

説明

消費されたディスク領域のサイズ。

すべてのユーザーデータベースのデータファイルとログファイルのサイズ。

データサイズ。

すべてのユーザーデータベースのデータファイル (mdfファイルおよびndfファイル) のサイズ。

消費されたログスペースのサイズ。

すべてのユーザーデータベースのログファイル (ldfファイル) 。

一時的なファイルサイズ

tempdbのすべてのmdf、ndf、およびldfファイルのサイズ。

システムファイルスペースの使用

master、msdb、およびmodelデータベースのデータファイルとログファイル、およびSQL Serverインスタンスディレクトリ下の一部のシステムファイル (エラーログ、dllファイルなど) のサイズ。

方法2

SQL文を実行して、すべてのデータベースのデータファイル (mdfファイルとndfファイル) とログファイル (ldfファイル) のサイズを表示します。 詳細については、「RDS For SQL Serverインスタンス、データベース、およびテーブルが占有するストレージ容量の表示方法」をご参照ください。

解決問題のフルスペースと自動ロック

インスタンスのストレージ容量のアップグレード

ストレージ容量をアップグレードした後、インスタンスのロックを解除できます。 インスタンスのストレージスペースをアップグレードする方法の詳細については、「設定の変更」をご参照ください。インスタンスのストレージスペースが上限に達した場合は、チケットを起票してカスタマーサービスに問い合わせ、インスタンスのロックを一時的に解除してください。

高ログファイル使用率の解決策

原因

アプリケーションに大量のトランザクション操作がある場合、トランザクションログは増加し続け、インスタンスのディスク容量が上限を超え、インスタンスがロックされる可能性があります。

解決策1

  1. クライアントがインスタンスに接続したら、次のステートメントを実行します。

    select name,log_reuse_wait,log_reuse_wait_desc from sys.databases;

  2. IS LOG_BACKUPの値はlog_reuse_wait_descです。トランザクションログを縮小してください。

    説明

    指示ログファイルが非常に大きい場合、ログバックアップ時間は比較的長く、ログファイルを縮小するとき、コミットされていないトランザクションが発生した場合、単一の縮小の効果は明らかではありません。 1回の縮小の効果が明らかでない場合は、トランザクションログを再度縮小することをお勧めします。

解決策2

トランザクションログの急激な増加の根本的な原因は、大量のトランザクションまたは大規模なトランザクションです。 たとえば、トランザクションでは5百万行のデータが操作されます。 このような大規模なトランザクションが存在する場合は、トランザクションを分割し、各トランザクションを100,000行で50回実行することを推奨します。

  • データベースファイルが大量のスペースを占有する場合は、データファイルの使用状況を確認できます。 ファイルが大きいが使用量が少ないデータベースの場合は、それに応じて処理できます。 詳しい手順は次のとおりです。

    1. 次のSQL文を順番に実行して、データベースの空き領域を確認します。

      USE [$DB_Name];
      SELECT SUM(unallocated_extent_page_count) AS [free pages] 、
             (SUM(unallocated_extent_page_count)* 1.0/128) AS [MB単位の空き容量]
      sys.dm_db_file_space_使用状況
      から

      注:[$DB_Name] はデータベース名を示します。

    2. 大量の容量を消費するデータベースを検索し、次のステートメントを実行してデータベースを縮小します。

      DBCC SHRINKDATABASE([$DB_Name]);

      次のコマンドを実行して、1つのファイルを縮小することもできます。

      DBCC SHRINKFILE(file_id,[$サイズ]);
      説明

      注:[$Size] は縮小後のサイズを示し、縮小するサイズは示しません。 単位は MB です。

  • 一時ファイルの高使用率への解決策。 [インスタンスモニタリング] タブから、一時ファイルの容量が多すぎるかどうかを確認できます。 一時ファイル用の十分なスペースがない場合は、対応するエラーログも記録されます。 一時ファイル領域が不足している場合のトラブルシューティング方法については、「tempdbでのディスク領域不足のトラブルシューティング」をご参照ください。次の操作を実行することを推奨します。

    • インスタンスを再起動して、一時ファイルのスペースを解放します。

    • 一時テーブル、行バージョン、およびテーブル変数をタイムリーにリリースします。

適用範囲

  • ApsaraDB RDS for SQL Server