MariaDB のスロークエリと一般ログにアクセスする - Amazon Relational Database Service

MariaDB のスロークエリと一般ログにアクセスする

MariaDB のスロークエリログと一般ログは、DB パラメータグループのパラメータを設定することで、ファイルまたはデータベーステーブルに書き込むことができます。DB パラメータグループの作成と変更の詳細については、「Amazon RDS のパラメータグループ」を参照してください。Amazon RDS コンソール、Amazon RDS API、AWS CLI、または AWS SDK を使用して、スロークエリログまたは一般ログを表示する前に、以下のパラメータを設定する必要があります。

以下のリストに示すパラメータを使用して MariaDB のログ記録を制御できます。

  • slow_query_log または log_slow_query: スロークエリログを作成するには、1 に設定します。デフォルトは 0 です。

  • general_log: 一般ログを作成するには、1 に設定します。デフォルトは 0 です。

  • long_query_time または log_slow_query_time: 高速で実行されるクエリがスロークエリログに記録されないようにするために、ログに記録されるクエリの最短実行時間の値を秒単位で指定します。デフォルトは 10 秒で、最小値は 0 です。log_output = FILE の場合は、マイクロ秒の精度になるように、浮動小数点値を指定できます。log_output = TABLE の場合は、秒の精度になるように、整数値を指定する必要があります。実行時間が long_query_time または log_slow_query_time の値を超えたクエリのみがログに記録されます。例えば、long_query_time または log_slow_query_time を 0.1 に設定すると、実行時間が 100 ミリ秒未満のすべてのクエリはログに記録されなくなります。

  • log_queries_not_using_indexes: インデックスを使用しないすべてのクエリをスロークエリログに記録するには、このパラメータを 1 に設定します。デフォルトは 0 です。インデックスを使用しないクエリは、その実行時間が long_query_time パラメータの値未満であってもログに記録されます。

  • log_output option: log_output パラメータに指定できるオプションは、次のとおりです。

    • TABLE (デフォルト) - 一般クエリを mysql.general_log テーブルに、スロークエリを mysql.slow_log テーブルに書き込みます。

    • FILE - 一般クエリログとスロークエリログの両方をファイルシステムに書き込みます。ログファイルは 1 時間ごとにローテーションされます。

    • NONE - ログ記録を無効にします。

ログ記録が有効になっている場合、Amazon RDS は、テーブルログのローテーションまたはログファイルの削除を定期的に実行します。これは、ログファイルが大きくなることでデータベースが使用できなくなったりパフォーマンスに影響する可能性を低く抑えるための予防措置です。ログ記録の FILE オプションと TABLE オプションでは、ローテーションと削除が次のように行われます。

  • FILE ログ記録が有効になっている場合、ログファイルの検査が 1 時間ごとに実行され、作成後 24 時間を超えた古いログファイルは削除されます。場合によっては、削除後の残りのログファイルの合計サイズが、DB インスタンスに割り当てられた領域のしきい値である 2 % を超えることがあります。この場合、ログファイルのサイズがしきい値以下になるまで、最も大きいログファイルから順に削除されます。

  • TABLE ロギングを有効化すると、24 時間ごとにログテーブルのローテーションが実行される場合があります。このログテーブルのローテーションは、テーブルログに使用されている領域が、割り当てられたストレージ領域の 20 % を超えると、実行されます。結合されたすべてのログのサイズが 10 GB を超える場合にも発生します。DB インスタンスに使用されている領域が、DB インスタンスに割り当てられたストレージ領域の 90% を超えている場合は、ログのローテーションを実行するためのしきい値が小さくなります。テーブルログに使用されている領域が、割り当てられたストレージ領域の 10% を超えると、ログテーブルのローテーションが実行されます。結合されたすべてのログのサイズが 5 GB を超えると、ログはローテーションされます。

    ログテーブルのローテーションが実行されると、現在のログテーブルがバックアップのログテーブルにコピーされ、現在のログテーブル内にあるエントリは削除されます。バックアップのログテーブルが既に存在する場合は、現在のログテーブルをバックアップにコピーする前に、削除されます。バックアップのログテーブルは、必要に応じて照会することができます。mysql.general_log テーブルに対するバックアップのログテーブルは、mysql.general_log_backup という名前になります。mysql.slow_log テーブルに対するバックアップのログテーブルは、mysql.slow_log_backup という名前になります。

    mysql.general_log テーブルのローテーションは、mysql.rds_rotate_general_log プロシージャを呼び出すことで実行できます。mysql.slow_log テーブルのローテーションは、mysql.rds_rotate_slow_log プロシージャを呼び出すことで実行できます。

    データベースバージョンのアップグレード時にも、テーブルログのローテーションが実行されます。

Amazon RDS では、TABLE ログおよび FILE ログのローテーションが Amazon RDS イベントで記録され、ユーザーに通知が送信されます。

Amazon RDS コンソール、Amazon RDS API、Amazon RDS CLI、または AWS SDK からログを使用するには、log_output パラメータを FILE に設定します。MariaDB エラーログと同様、これらのログファイルは 1 時間ごとにローテーションされます。直前 24 時間以内に生成されたログファイルが保持されます。

スロークエリと一般ログの詳細については、MariaDB のドキュメントの以下のトピックを参照してください。