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

ApsaraDB RDS:ApsaraDB RDSインスタンスがロック状態の場合はどうすればよいですか。

最終更新日:Jan 23, 2024

問題の説明

  • RDSインスタンスの 基本情報 ページで、RDSインスタンスの [ステータス] の値は [ロック] です。

  • RDSインスタンスが [ロック中] 状態であるため、RDSインスタンスでINSERTおよびUPDATEステートメントを実行できません。

    説明
    • RDSインスタンスがMySQL 5.6、MySQL 5.7、またはMySQL 8.0を実行し、20190815以降のマイナーエンジンバージョンを使用している場合、RDSインスタンスには次の種類のロックが発生する可能性があります。

      • LOCK_WRITE_GROWTH: ディスク使用量の増加を禁止します。 プライマリRDSインスタンスのストレージ容量が使い果たされた場合、このタイプのロックがトリガーされて、ディスク使用量の増加を引き起こす可能性のある操作が無効になります。 DELETE文を実行してデータを削除すると、大量のバイナリログファイルが生成され、ディスクの使用量が増加します。 データを削除するには、DROPまたはTRUNCATEステートメントを実行することを推奨します。

      • LOCK_READ: 読み取り操作を禁止します。 読み取り専用RDSインスタンスのストレージ容量が使い果たされた場合、このタイプのロックがトリガーされ、データクエリと書き込み操作が無効になります。

      • LOCK_WRITE: 書き込み操作を禁止します。 このタイプのロックは、インスタンスの有効期限、ApsaraDB MyBaseクラスターのホストの有効期限、またはインスタンスの移行によってトリガーされる場合があります。 LOCK_WRITE_GROWTHの制限に加えて、このタイプのロックは、DROPおよびTRUNCATE操作などの追加データの書き込み操作も無効にします。

      RDSインスタンスがロックされていて、RDSインスタンスでいくつかのSQLステートメントを実行すると、ERROR 1290 (HY000): MySQLサーバーがLOCK_WRITE_GROWTHオプションで実行されているため、このステートメントを実行できませんというエラーメッセージが表示されます。

    • MySQL 5.1またはMySQL 5.5を実行し、マイナーエンジンバージョンを使用するRDSインスタンスがロックされている場合、ロックの原因に関係なく、RDSインスタンスで操作を実行できません。 これは、MySQL 5.6、MySQL 5.7、またはMySQL 8.0を実行し、20190815より前のマイナーエンジンバージョンを使用するRDSインスタンスにも適用されます。

原因

  • 原因1: RDSインスタンスのストレージ容量が使い果たされています。

  • 原因2: Alibaba Cloudアカウントに料金滞納があるか、RDSインスタンスの有効期限が切れます。

原因1に対応する対処方法

RDSインスタンスの 基本情報 ページに移動して、[使用状況統計] セクションでRDSインスタンスのストレージが使い果たされているかどうかを確認できます。存储空间使用量

RDSインスタンスのストレージを解放する

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDSインスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
  2. 左側のナビゲーションウィンドウで、モニターとアラーム をクリックして、各タイプのデータが占有しているストレージを表示します。

  3. データを削除して、データの種類に基づいてストレージを解放します。

    警告

    必要な場合を除き、データを削除しないことを推奨します。 ストレージを解放するためにデータを削除する場合は、データの損失を防ぐために、削除する前にデータをバックアップする必要があります。 RDSインスタンスのストレージ容量を拡張して、RDSインスタンスのロックを解除することもできます。

    • データファイル

      データベースエンジン

      解決策

      MySQL

      1. データ管理 (DMS) を使用してRDSインスタンスに接続します。 詳細については、「DMSを使用したApsaraDB RDS For MySQLインスタンスへのログイン」をご参照ください。

      2. 次のステートメントを実行して、RDSインスタンスのデータベースで指定されたテーブルのサイズを表示し、履歴データまたは削除可能な不要なデータを確認します。

        SELECT
            TABLE_NAME、
            concat (ラウンド ((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2) 、'MB ') データとして
        から
            information_schema。 テーブル
        どこ
            TABLE_SCHEMA = '<データベース名>'
        注文によって
            データ + 0 DESC; 
      3. データベースでDROP TABLE <Table name>; ステートメントを実行して、データを削除します。

      4. システムがRDSインスタンスのロックを解除するまで約5分待ちます。

      PostgreSQL

      1. DMSを使用してRDSインスタンスに接続します。 詳細については、「DMSを使用したApsaraDB RDS For MySQLインスタンスへのログイン」をご参照ください。

      2. 次のステートメントを実行して、RDSインスタンスのデータベースで指定されたテーブルのサイズを表示し、履歴データまたは削除可能な不要なデータを確認します。

        SELECT 
            table_schema | | '.' | | table_name AS table_full_name,
            pg_total_relation_size('"' | | table_schema | | '"."' | | table_name | | '"') サイズ
        から
            information_schema.tables
        注文によって
            pg_total_relation_size('"' | | table_schema | | '"."' | | table_name | | '"')
        DESC; 
      3. データベースでDROP TABLE <Table name>; ステートメントを実行して、データを削除します。

      4. システムがRDSインスタンスのロックを解除するまで約5分待ちます。

      SQL Server

      1. DMSを使用してRDSインスタンスに接続します。 詳細については、「DMSを使用したApsaraDB RDS For MySQLインスタンスへのログイン」をご参照ください。

      2. 次のステートメントを実行して、RDSインスタンスのデータベースで指定されたテーブルのサイズを表示し、履歴データまたは削除可能な不要なデータを確認します。

        SELECT
              t. テーブル名としての名前、
              CAST(ROUND(((SU M(a.us ed_pages) * 8) / 1024.00) 、2) AS NUMERIC(36、2) AS UsedSpaceMB
         FROM
             sys.tables t
         INNER JOIN
             sys.indexes i ON t.OBJECT_ID = i.object_id
         INNER JOIN
             sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
         INNER JOIN
             sys.allocation_units a ON p.partition_id = a.container_id
         左外側の参加
             sys.schemas s ON t.schema_id = s.schema_id
         WHERE 1=1
             AND t.is_ms_shipped = 0
             AND i.OBJECT_ID > 255
         GROUP BY
             t. 名前、s。名前、p。行
         ORDER BY
             t. 名前 
      3. データベースでDROP TABLE <Table name>; ステートメントを実行して、データを削除します。

      4. システムがRDSインスタンスのロックを解除するまで約5分待ちます。

    • ログファイル

      データベースエンジン

      解決策

      MySQL

      バイナリログファイルを削除します。 詳細については、「ApsaraDB RDS For MySQLインスタンスのバイナリログファイルの削除」をご参照ください。

      PostgreSQL

      ApsaraDB RDS for PostgreSQLインスタンスのログファイルを手動で削除することはできません。

      非アクティブなレプリケーションスロットを手動で削除して、AliPGがWALログを自動的に削除できるようにすることができます。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのWALログ管理機能の使用」をご参照ください。

      SQL Server

      ApsaraDB RDS for SQL Serverインスタンスのログファイルを手動で削除することはできません。

    • 一時ファイル: 詳細については、「ApsaraDB RDS For MySQLインスタンスが一時ファイルによってストレージ容量が使い果たされたためにロック状態になった場合の対処方法」をご参照ください。

    • システムファイル: システムファイルは削除できません。

RDSインスタンスのストレージ容量を拡張する

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDSインスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。
  2. 基本情報 ページの 設定情報 セクションで、設定を変更する をクリックします。

    表示されるページで、RDSインスタンスのストレージ容量を拡張します。 詳細については、「ApsaraDB RDS For MySQLインスタンスの仕様の変更」をご参照ください。

  3. 支払いが完了したら、基本情報 ページの右上隅にある按钮アイコンをクリックして、[タスク] ページで構成変更の進行状況を表示します。

    ストレージ容量の拡張に必要な時間は、RDSインスタンスのストレージタイプによって異なります。 ストレージ容量の拡張に必要な時間を次の表に示します。

    ストレージタイプ

    期間

    説明

    ローカルディスク

    ビジネス要件に基づく

    • RDSインスタンスのストレージリソースがビジネス要件を満たさない場合、インスタンス間のデータ移行がトリガーされる可能性があり、ストレージ容量の拡張に必要な時間は複数の要因によって異なります。 オフピーク時にストレージ容量を拡張することを推奨します。

    • 仕様の変更により、約30秒続く一時的な接続が発生します。 RDS インスタンスの仕様変更は、オフピーク時に実行することを推奨します。 さらに、アプリケーションがRDSインスタンスに自動的に再接続するように設定されていることを確認します。 一時接続中は、データベース、アカウント、およびネットワーク設定に関連するほとんどの操作を実行できません。

    クラウドディスク

    5分について

    • RDSインスタンスがMySQLまたはPostgreSQLを実行し、クラウドディスクを使用している場合、RDSインスタンスのストレージ容量を拡張しても、一時的な接続は発生しません。

    • RDSインスタンスがSQL Serverを実行し、クラウドディスクを使用している場合、RDSインスタンスのストレージ容量を拡張すると、約30秒の一時的な接続が発生します。 一時的な接続中は、RDSインスタンスのデータベース、アカウント、およびネットワーク設定に関連するほとんどの操作を実行できません。 オフピーク時にRDSインスタンスのストレージ容量を拡張することを推奨します。 または、RDSインスタンスに自動的に再接続するようにアプリケーションが設定されていることを確認します。

原因2に対応する対処方法

  • サブスクリプションRDSインスタンス: RDSインスタンスの有効期限が切れ、更新されない場合は、インスタンスを更新します。 約5分待ちます。 次に、インスタンスのステータスが [実行中] かどうかを確認します。 RDSインスタンスの更新方法の詳細については、「ApsaraDB RDS For MySQLインスタンスの手動更新」をご参照ください。

  • 従量課金RDSインスタンス: Alibaba Cloudアカウントに料金滞納がある場合、 Alibaba Cloudアカウントを補充し、5分待ってRDSインスタンスが 実行中 状態かどうかを確認します。

O&Mの提案

RDSインスタンスがロックされないように、次の設定を実行することを推奨します。

  • 料金滞納とインスタンスの有効期限の通知ポリシーを設定します。

    1. ApsaraDB for RDS コンソールにログインします。

    2. 右上隅の通知アイコンをクリックして、メッセージセンターページに移動します。

    3. 左側のナビゲーションウィンドウで、[共通設定] をクリックします。

    4. [共通設定] ページの [通知の種類] 列で、[プロダクト滞納、一時停止、および差し迫ったリリース通知] を選択し、[変更] をクリックします。

    5. [連絡先の変更] ダイアログボックスで、アラート連絡先を選択し、[保存] をクリックします。

  • ストレージ使用量のアラートルールを設定します。 ストレージ使用量が90% を超えたときにアラートがトリガーされるアラートルールを設定することを推奨します。 詳細については、「ApsaraDB RDS for MySQL インスタンスのアラートルールの設定」をご参照ください。

  • SQL Explorerと監査を有効にします。 ストレージ使用量が大幅に増加した場合は、[モニタリングとアラート] ページの情報に基づいて、増加中に実行されたSQL文を照会し、SQL文を最適化できます。 SQL Explorerと監査の詳細については、「ApsaraDB RDS For MySQLインスタンスでのSQL Explorerと監査機能の使用」をご参照ください。

  • 自動ストレージ拡張を設定します。 RDSインスタンスのストレージリソースが不足している場合、システムは自動的にRDSインスタンスのストレージ容量を拡張します。 詳細については、「ApsaraDB RDS For MySQLインスタンスの自動ストレージ拡張の設定」および「ApsaraDB RDS for PostgreSQLインスタンスの自動ストレージ拡張の設定」をご参照ください。

  • SQL文を最適化して、大きな一時ファイルが使用されるシナリオでORDER BY句とGROUP BY句が頻繁に使用されないようにします。

インスタンスに十分なストレージリソースがあるか、更新されているにもかかわらず、RDSインスタンスがロックされるのはなぜですか。

RDSインスタンス上の設定変更タスクなどのタスクが進行中です。 タスクが完了すると、RDSインスタンスは自動的にロック解除されます。 [基本情報] ページの右上隅にある按钮アイコンをクリックすると、[タスク] ページに移動してタスクの進行状況を表示できます。

インスタンスがロック状態の場合、RDSインスタンスの設定をアップグレードまたはダウングレードできますか。

インスタンスのストレージ容量が使い果たされたためにRDSインスタンスがロックされている場合、RDSインスタンスの設定をアップグレードまたはダウングレードできます。 料金滞納などの他の理由でRDSインスタンスがロックされている場合は、料金滞納を完了してから、RDSインスタンスの設定をアップグレードまたはダウングレードする必要があります。

ロック状態のRDSインスタンスは、段階的に廃止されたインスタンスタイプを使用します。 ストレージ容量を拡張してインスタンスのロックを解除するにはどうすればよいですか。

RDSインスタンスのインスタンスタイプを使用可能なインスタンスタイプに変更し、ストレージ容量を拡張してインスタンスのロックを解除する必要があります。 使用可能なインスタンスタイプの詳細については、「Primary ApsaraDB RDSインスタンスタイプ」をご参照ください。