このトピックでは、ApsaraDB RDS for MySQLの一般的なクエリログ機能に関するよくある質問に対する回答を提供します。
背景情報
デフォルトでは、次の理由により、ApsaraDB RDS for MySQLは一般的なクエリログをテーブルに保存します。
ユーザーはApsaraDB RDS for MySQLのファイルにアクセスできないため、ファイルに保存されている一般的なクエリログを直接照会することはできません。
一般クエリログとスロークエリログの出力形式は、log_outputパラメーターの値によって決まります。 ApsaraDB RDS for MySQLは低速クエリログを回転させるため、低速クエリログをテーブルに保存する必要があります。 その結果、一般的なクエリログもテーブルに格納する必要があります。
一般的なクエリログは大量のストレージを占有します
問題の説明
ApsaraDB RDS for MySQLインスタンスのストレージ容量が使い果たされました。 エラーが過度に大きな一般的なクエリログが原因であるかどうかを確認するには、次の手順を実行します。
RDSインスタンスのストレージ使用状況を確認します。 sys_data_sizeファイルが大きすぎます。 詳細については、「モニタリング情報の表示」をご参照ください。
インスタンスパラメーターを表示します。 general_logパラメーターがONに設定されています。 詳細については、「ApsaraDB RDS For MySQLインスタンスのパラメーターの表示」をご参照ください。
RDSインスタンスに接続し、次のステートメントを実行します。 出力は、一般的なクエリログのサイズが大きすぎることを示しています。 詳細については、「ApsaraDB RDS for MySQL インスタンスへの接続」をご参照ください。
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 "Fragment size in MB" FROM information_schema.TABLES WHERE table_name='general_log'
説明SQL文は、
information_schema
データベースのTABLES
テーブルからmysql.general_log
テーブルのデータを照会するために使用されます。 データサイズはMB単位で表示されます。このSQL文によって返されるデータはサンプルデータです。 返される実際のデータは異なります。
発生原因
general_logパラメーターをONに設定すると、mysql.general_logという名前のテーブルが生成され、RDSインスタンスで実行されたすべての操作と操作の詳細が記録されます。 操作は、選択、挿入、更新、および削除操作を含む。 大量のクエリが実行されている場合や、mysql.general_logテーブルが長期間クリアされていない場合、テーブルは大量のストレージリソースを消費します。 その結果、RDSインスタンスのストレージ容量が使い果たされます。
一般的なクエリログはパフォーマンスの問題を引き起こします
問題の説明
接続の数が増加するにつれて、CPU利用率は増加する。 SHOW PROCESSLIST
ステートメントを実行するか、またはinnodb_trxテーブルを照会すると、多数の接続がテーブルレベルロック待ち状態になっていることが示されます。
発生原因
デフォルトでは、RDSインスタンスの一般的なクエリログはテーブルに保存されます。 プロセスにはメタデータロック (MDL) とテーブルロックが必要なため、各スレッドはテーブルにデータを順次書き込みます。 この場合、複数のスレッドが同時にテーブルに書き込もうとすると、接続はテーブルレベルロック待ち状態になります。
一般的なクエリログによりRTOが長くなります
問題の説明
RDSインスタンスの復旧時間目標 (RTO) が増加します。 復旧期間中、RDSインスタンスは使用できません。
発生原因
RDSインスタンスが予期せずシャットダウンした場合、一般的なクエリログのクラッシュマーカーはtrueです。 この場合、RDSインスタンスは再起動時に自動復旧プロセスを開始します。 リカバリ中に、RDSインスタンス上のテーブルのサイズが大きい場合、テーブルの復元に必要な時間が長くなる可能性があり、RDSインスタンスは使用できません。
ソリューション
一般的なクエリログのクリア
新しいログが生成されないようにするには、general_logパラメーターをOFFに設定します。 詳細は、「インスタンスパラメーターの変更」をご参照ください。
特権アカウントを使用してRDSインスタンスに接続し、次のステートメントを実行して一般的なクエリログをクリアします。 詳細については、「ApsaraDB RDS for MySQLインスタンスに接続します。 」をご参照ください。
説明TRUNCATEステートメントを実行して、MySQL 5.6を実行するRDSインスタンスの一般的なクエリログをクリアすることはできません。 詳細については、機能 をご覧ください。
TRUNCATE TABLE mysql.general_log;
次に何をすべきか
問題をデバッグまたはトレースする場合は、general_logパラメーターを短時間ONに設定することを推奨します。 問題を解決したら、できるだけ早くgeneral_logパラメーターをOFFに設定します。
SQLエクスプローラーと監査機能を有効にすることを推奨します。 この機能は、データベースカーネル、SQL文の実行に使用されるアカウント、クエリが開始されるアプリケーションのIPアドレス、およびSQL文の実行の詳細から、SQL文を自動的に記録および分析できます。 この機能は、RDSインスタンスのパフォーマンスには影響しません。 詳細については、「SQLエクスプローラーと監査機能の使用」をご参照ください。 SQL Explorerおよび監査機能を使用して生成されたデータは、Database Autonomy Service (DAS) に格納されます。 RDSインスタンスのストレージ容量は影響を受けません。
RDSインスタンスのストレージ容量を拡張できます。 詳細は、「インスタンス仕様の変更」をご参照ください。 RDSインスタンスの自動ストレージ拡張機能を有効にすることもできます。 RDSインスタンスのストレージ容量が指定されたしきい値に達すると、システムは自動的にRDSインスタンスのストレージ容量を拡張します。 詳細については、「自動ストレージ拡張の設定」をご参照ください。