ApsaraDB RDS インスタンスが Locking ステータスに移行すると、INSERT 文および UPDATE 文の実行に失敗します。本ページでは、このロックの原因、解決方法、および再発防止策について説明します。
症状
ご利用のインスタンスの 基本情報 ページで、ステータス に Locking と表示されます。また、INSERT 文および UPDATE 文を実行するとエラーが返されます。
マイナーエンジンバージョン 20190815 以降を実行している MySQL 5.6、5.7、または 8.0 インスタンスでは、ロックの種類に応じてブロックされる操作が異なります。
| ロックの種類 | トリガー条件 | ブロックされる操作 |
|---|---|---|
LOCK_WRITE_GROWTH | プライマリインスタンスのストレージが満杯 | ディスク使用量を増加させる操作。このロック下でデータを削除する場合は、DELETE ではなく DROP または TRUNCATE を使用してください。DELETE はバイナリログファイルを生成し、結果としてディスク使用量が増加し、ロックが継続します。 |
LOCK_READ | 読み取り専用インスタンスのストレージが満杯 | すべての読み取りおよび書き込み操作 |
LOCK_WRITE | インスタンスの有効期限切れ、ApsaraDB MyBase ホストの有効期限切れ、またはインスタンス移行 | DROP や TRUNCATE を含むすべての書き込み操作 |
LOCK_WRITE_GROWTH が有効な状態でブロックされた文を実行すると、以下のエラーが発生します。
ERROR 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statementMySQL 5.1 および 5.5 インスタンス(任意のマイナーエンジンバージョン)、およびマイナーエンジンバージョンが 20190815 より前の MySQL 5.6、5.7、または 8.0 インスタンスでは、ロックの原因に関係なく、インスタンスがロックされている間はすべての操作が許可されません。
原因の診断
操作を行う前に、適用される条件を確認します。
| 原因 | 確認方法 |
|---|---|
| ストレージが満杯 | まず 基本情報 ページに移動し、「使用状況統計」セクションのストレージ使用率バーを確認します。使用率が 100 % またはほぼ満杯である場合、ストレージの枯渇が原因です。 |
| 支払い遅延または有効期限切れ | Alibaba Cloud アカウントの未払い残高を確認してください。サブスクリプションインスタンスの場合は、基本情報 ページで有効期限を確認します。 |

ストレージ満杯によるロックの解決
ストレージを解放するか、ストレージ容量を拡張するという 2 つの選択肢があります。
データを削除する前に必ずバックアップを取得し、データ損失を防いでください。
ストレージの解放
インスタンス ページに移動します。ご利用のインスタンスが配置されているリージョンを選択し、インスタンス ID をクリックします。
左側のナビゲーションウィンドウで モニタリングとアラート をクリックし、データタイプごとのストレージ使用状況を確認します。

ストレージ使用量の多い項目に応じてデータを削除します。
一時ファイル(
temp_file_sizeメトリック)MySQL はソート、グループ化、結合操作のために一時テーブルを生成し、大規模トランザクションのためにバイナリログキャッシュファイルを生成します。詳細については、「一時ファイルによって ApsaraDB RDS for MySQL インスタンスのストレージ容量が枯渇し、Locked ステータスとなった場合の対応方法」をご参照ください。
ログファイル(
binlog_sizeおよびgeneral_log_sizeメトリック)データベースエンジン ログストレージの解放方法 MySQL モニタリングとアラート ページでストレージ使用率を確認した後、ログファイルを削除します。「バイナリログファイルによって ApsaraDB RDS for MySQL インスタンスのストレージ容量が枯渇した場合の対応方法」および「ApsaraDB RDS for MySQL の一般クエリログ機能に関する FAQ PostgreSQL ログファイルは手動で削除できません。非アクティブなレプリケーションスロットを削除することで、AliPG が WAL ログを自動的に削除できるようになります。「ApsaraDB RDS for PostgreSQL インスタンスにおける WAL ログ管理機能の利用方法」をご参照ください。 SQL Server ログファイルは手動で削除できません。ApsaraDB RDS コンソールでトランザクションログを縮小 してください。 データファイル(
user_data_sizeメトリック)MySQL の場合:
以下のクエリを実行して、サイズの大きいテーブルを特定します。
SELECT TABLE_NAME, concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),'MB') AS DATA FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<Database name>' ORDER BY DATA + 0 DESC;履歴データや不要なデータを含むテーブルを削除します:
DROP TABLE <Table name>;約 5 分待ちます。システムが自動的にインスタンスのロックを解除します。
PostgreSQL の場合:
説明ロックによりインスタンスへの接続ができない場合は、まずストレージ容量を拡張し、ディスク領域を確保してから、必要に応じてストレージ容量を縮小してください。「インスタンスの仕様の変更」をご参照ください。
DMS を使用してインスタンスに接続 します。
以下のクエリを実行して、サイズの大きいテーブルを特定します。
SELECT table_schema || '.' || table_name AS table_full_name, pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') AS size FROM information_schema.tables ORDER BY pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC;履歴データや不要なデータを含むテーブルを削除します:
DROP TABLE <Table name>;約 5 分待ちます。システムが自動的にインスタンスのロックを解除します。
SQL Server の場合は、「ApsaraDB RDS for SQL Server インスタンスにおけるストレージ不足のトラブルシューティング」をご参照ください。
システムファイル(
undolog_sizeメトリック)InnoDB テーブルに対する長時間実行クエリと、大量の同時データ変更操作が組み合わさると、undo ログが過剰に蓄積されます。「システムファイルの蓄積によるストレージ不足のトラブルシューティング」をご参照ください。
ストレージ容量の拡張
インスタンス ページに移動します。ご利用のインスタンスが配置されているリージョンを選択し、インスタンス ID をクリックします。
構成情報 セクション(基本情報 ページ内)で、仕様の変更 をクリックし、ストレージ容量を拡張 します。
支払いが完了すると、[基本情報] ページの右上隅にある
アイコンをクリックして、[タスク] ページで進行状況を確認できます。また、ApsaraDB RDS コンソール にログインし、左側のナビゲーションウィンドウで [タスクセンター] をクリックして、拡張の進行状況を確認することもできます。
拡張に要する時間は、ストレージタイプによって異なります。
| ストレージタイプ | 所要時間 | 備考 |
|---|---|---|
| プレミアムローカル SSD | 異なる | インスタンスのローカル記憶域が不足している場合、インスタンス間のデータ移行が発生する可能性があります。変更中に約 30 秒の一時的な切断が発生します。ピーク時間帯を避けて実施し、アプリケーションが自動的に再接続できるよう設定してください。 |
| クラウドディスク | 約 5 分 | MySQL および PostgreSQL インスタンス:一時的な切断は発生しません。SQL Server インスタンス:約 30 秒の一時的な切断が発生する場合があります。特定のインスタンスでは、データ損失やワークロードの中断を伴わずにストレージを拡張できます。 |
支払い遅延または有効期限切れによるロックの解決
今後のロック発生の防止
以下の設定を行うことで、「Locking」ステータスを回避できます。
支払いおよび有効期限の通知を設定:
ApsaraDB RDS コンソール にログインします。
右上隅の
アイコンをクリックし、メッセージセンター ページを開きます。左側のナビゲーションウィンドウで 共通設定 をクリックします。
通知タイプ 列より、製品の支払い遅延・停止・直近のリリースに関する通知 を選択し、変更 をクリックします。
連絡先の変更 ダイアログボックスでアラート連絡先を選択し、保存 をクリックします。
ストレージ使用率のアラートルールを設定: ストレージ使用率が 90 % を超えた際にトリガーされるアラートルール を設定します。
SQL Explorer および監査機能を有効化: ストレージ使用率が急増した場合、モニタリングとアラート ページを使用して、急増時に実行された SQL ステートメントを特定し、SQL Explorer および監査機能を有効化 して、これらのステートメントを最適化します。
ストレージの自動拡張を有効化: ストレージが不足した場合に、システムが自動的に容量を拡張します。各データベースエンジンの設定ガイドについては、MySQL、PostgreSQL、および SQL Server をご参照ください。
SQL ステートメントの最適化: 大規模なデータセットに対して頻繁に ORDER BY や GROUP BY 操作を実行しないでください。これらは大規模な一時ファイルを生成し、ストレージを消費します。
よくある質問
大量のデータを削除したにもかかわらず、LOCK_WRITE_GROWTH が依然として有効なのはなぜですか?
DELETE はレコードおよびデータページを再利用可能としてマークするだけで、基盤となるディスクファイルを縮小したり、表領域を解放したりしません。表領域を解放するには、OPTIMIZE TABLE ステートメントを実行してください。「ApsaraDB RDS for MySQL インスタンスの表領域を解放するために OPTIMIZE TABLE ステートメントを使用する方法」をご参照ください。
ストレージが十分にある、または有効期限を更新したにもかかわらず、インスタンスが依然としてロックされているのはなぜですか?
構成変更などのタスクが実行中です。タスクが完了すると、インスタンスは自動的にロック解除されます。[基本情報] ページの右上隅にある
アイコンをクリックすると、[タスク] ページでタスクの進捗を確認できます。
ロック中のインスタンスで、インスタンスの仕様を変更できますか?
ストレージ枯渇によるロック:はい、設定の変更(アップグレードまたはダウングレード)が可能です。
支払い遅延など他の理由によるロック:まず支払い遅延を解消したうえで、仕様の変更を行ってください。
ロック中のインスタンスが廃止予定のインスタンスタイプを使用しています。ストレージを拡張してロックを解除するにはどうすればよいですか?
まず、現在利用可能なインスタンスタイプに変更したうえで、ストレージを拡張してください。利用可能なインスタンスタイプについては、「主な ApsaraDB RDS インスタンスタイプ」をご参照ください。
ロック中なのに、なぜストレージ使用率が引き続き増加しているのですか?
INSERT および UPDATE はブロックされていますが、読み取り操作は引き続きログファイルおよび一時データを生成します。そのため、インスタンスが Locking ステータスの間でも、ストレージの消費は継続します。