このトピックでは、ApsaraDB RDS for MySQLインスタンスのストレージ容量が大きなgeneral_logファイルによって使い果たされる問題を解決する方法について説明します。
問題の説明
RDSインスタンスのストレージ容量が使い果たされました。 エラーを特定し、大きなgeneral_logファイルが原因であることを確認するには、次の手順を実行します。
RDSインスタンスのストレージ使用状況を確認します。 sys_data_sizeファイルが大きすぎます。 詳細については、「モニタリング情報の表示」をご参照ください。
インスタンスパラメーターを表示します。 general_logパラメーターがONに設定されています。 詳細については、「ApsaraDB RDS For MySQLインスタンスのパラメーターの表示」をご参照ください。
RDSインスタンスに接続し、次のステートメントを実行します。 出力は、general_logファイルが大きすぎることを示します。 詳細については、「ApsaraDB RDS for MySQL インスタンスへの接続」をご参照ください。
SELECT table_schema AS 'Database', table_name,SUM(data_length + index_length + data_free)/1024/1024 AS "Table size MB",SUM(DATA_FREE)/1024/1024 AS "Fragment size in MB" information_schema.TABLESから WHERE table_name='general_log'
説明SQL文は、
information_schema
データベースのTABLES
テーブルからmysql.general_log
テーブルのデータを照会するために使用されます。 データサイズはMB単位で表示されます。このSQL文によって返されるデータはサンプルデータです。 返される実際のデータは異なります。
発生原因
general_logパラメーターをONに設定すると、general_logファイルが生成され、RDSインスタンスで実行されたすべての操作と操作の詳細が記録されます。 操作には、クエリ、挿入、更新、および削除操作が含まれます。 クエリが長時間実行されている場合や、general_logファイルが長時間クリアされていない場合は、大量のデータが生成されます。 データはストレージを占有し、ストレージ容量を使い果たします。
解決策
_logファイルの消去
general_logパラメーターをOFFに設定して、新しいログが生成されないようにします。 詳細は、「インスタンスパラメーターの変更」をご参照ください。
特権アカウントを使用してRDSインスタンスに接続し、次のステートメントを実行してgeneral_logファイルをクリアします。詳細については、「ApsaraDB RDS For MySQLインスタンスへの接続」をご参照ください。
TRUNCATE TABLE mysql.general_log;
次のステップ
問題をデバッグまたはトレースする場合は、general_logパラメーターを短時間有効にすることを推奨します。 問題を解決したら、できるだけ早くgeneral_logパラメーターを無効にします。
SQLエクスプローラーと監査機能を有効にすることを推奨します。 この機能は、データベースカーネル、SQL文の実行に使用されるアカウント、クエリが開始されるアプリケーションのIPアドレス、およびSQL文の実行の詳細から、SQL文を自動的に記録および分析できます。 この機能は、RDSインスタンスのパフォーマンスには影響しません。 詳細については、「SQLエクスプローラーと監査機能の使用」をご参照ください。 さらに、SQLエクスプローラーおよび監査機能を使用して生成されたデータは、Database Autonomy Service (DAS) に格納されます。 したがって、RDSインスタンスのストレージ容量は影響を受けません。
RDSインスタンスのストレージ容量を拡張できます。 詳細は、「インスタンス仕様の変更」をご参照ください。 RDSインスタンスの自動ストレージ拡張機能を有効にすることもできます。 RDSインスタンスのストレージ容量が指定されたしきい値に達すると、システムは自動的にRDSインスタンスのストレージ容量を拡張します。 詳細については、「自動ストレージ拡張の設定」をご参照ください。