低速な SQL 文や過剰なデータ挿入などの問題により ApsaraDB RDS for MySQL インスタンスのディスク領域が枯渇すると、システムはデータ損失を防ぐためにインスタンスを自動的にロックします。インスタンスのステータスは「ロック済み」に変わります。インスタンスがロックされている間は、書き込み操作を実行できません。このトピックでは、データファイル、一時ファイル、バイナリログファイル、undo ファイル、および general_log ファイルを削除してストレージ領域を解放する方法について説明します。
原因
インスタンスのストレージは、次の理由で枯渇する可能性があります。
データファイルの使用率が高い: 大量のデータがデータベースに書き込まれるため、データファイルが過剰なディスク領域を占有します。
ログファイルの使用率が高い: ログバックアップポリシーが正しく設定されていない場合、大規模なトランザクションによってログファイルが急速に増加する可能性があります。
一時ファイルの使用率が高い: 一時ファイルは大量の領域を消費する可能性があります。これらには、クエリ文のソート、グループ化、または結合操作によって生成される一時テーブルファイルや、コミットされていない大規模なトランザクションのログキャッシュファイルが含まれます。
システムファイルの使用率が高い: これは、多くの場合、サイズが大きすぎる undo ファイルが原因です。InnoDB テーブルで大量のデータが変更されている間に長時間実行されるクエリが実行されると、システムは大量の undo 情報を生成し、大量のストレージ領域を消費します。RDS for MySQL 8.0 は undo ファイルを自動的に削除するため、この問題はまれです。ただし、特殊なケースには注意が必要です。
general_log ファイルの使用率が高い: 一般ログが有効になっている場合、general_log ファイルには、各 SQL 文の実行詳細を含むすべての操作が記録されます。アクセス量が多い場合や、ファイルが定期的にクリアされない場合、大量のストレージ領域を消費する可能性があります。次のメソッドを使用して、general_log ファイルのサイズを確認できます。
インスタンスのストレージ使用状況を確認して、sys_data_size ファイルが大きすぎるかどうかを判断します。
インスタンスで一般ログが有効になっている (general_log パラメーターが ON に設定されている) かどうかを確認します。
RDS for MySQL インスタンスに接続し、次の文を実行して general_log ファイルのサイズをクエリします。
SELECT table_schema AS 'Database', table_name,SUM(data_length + index_length + data_free)/1024/1024 AS "Table size in MB",SUM(DATA_FREE)/1024/1024 AS "Fragmentation size in MB" FROM information_schema.TABLES WHERE table_name='general_log'説明上記の SQL 文は、
information_schemaデータベースのTABLESテーブルからmysql.general_logテーブルのサイズを取得し、値を MB に変換します。上記の SQL 文によって取得されるデータはサンプルデータであり、実際のデータとは異なる場合があります。
ソリューション
次のステップに従って問題の原因を特定し、ストレージ領域の不足によって発生した ApsaraDB RDS for MySQL インスタンスのロックを解決できます。
ApsaraDB RDS コンソールにログインし、[インスタンス] ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけてインスタンス ID をクリックします。
左側のナビゲーションウィンドウで、[モニタリングとアラーム] をクリックして、ストレージ領域を使用するファイルタイプを表示します。
実際の状況に基づいてソリューションを選択します。
説明ディスク領域をクリアすると、通常、RDS インスタンスは 5〜15 分以内にロック解除されます。