MariaDBのパフォーマンス監査:mysql.slow_logテーブル、General Query Log、サードパーティ製ツールの比較


mysql.slow_log テーブルは、実行時間が一定のしきい値を超えたクエリに関する情報を格納する MariaDB システムデータベースのテーブルです。 この情報は、パフォーマンスのボトルネックを特定し、データベースのパフォーマンスを改善するのに役立ちます。

場所

mysql.slow_log テーブルは、mysql システムデータベースにあります。

カラム

mysql.slow_log テーブルには、次のカラムが含まれています。

  • sql_text
    実行されたクエリ
  • rows_examined
    クエリによって調べられた行数
  • rows_sent
    クエリによって送信された行数
  • time_wait
    ロック取得にかかった時間(秒単位)
  • command
    実行されたクエリの種類("SELECT"、"INSERT"、"UPDATE"、"DELETE" のいずれか)
  • db
    クエリを実行したデータベース
  • port
    クエリを実行したクライアントのポート
  • host
    クエリを実行したホスト
  • user
    クエリを実行したユーザー
  • state
    クエリのステータス("starting"、"waiting for lock"、"running"、"killing"、"killed"、"error" のいずれか)
  • secs
    クエリの実行時間(秒単位)
  • start_time
    クエリの開始時刻

使用方法

mysql.slow_log テーブルを使用するには、まず slow_query_log システム変数を有効にする必要があります。 これは、次のコマンドを使用して実行できます。

SET GLOBAL slow_query_log = 1;

次に、long_query_time システム変数を、追跡するクエリの実行時間しきい値に設定する必要があります。 これは、次のコマンドを使用して実行できます。

SET GLOBAL long_query_time = 2;

この設定により、実行時間が 2 秒を超えたすべてのクエリが mysql.slow_log テーブルに記録されます。

mysql.slow_log テーブルのクエリを分析するには、次のコマンドを使用できます。

SELECT * FROM mysql.slow_log;

このコマンドは、mysql.slow_log テーブル内のすべての行を返します。 特定の列のみを返すには、SELECT 句を変更できます。 たとえば、次のコマンドは、開始時刻、実行時間、ユーザー、ホスト、およびクエリテキストのみを返します。

SELECT start_time, secs, user, host, sql_text FROM mysql.slow_log;

mysql.slow_log テーブルのデータを CSV ファイルにエクスポートするには、次のコマンドを使用できます。

SELECT * FROM mysql.slow_log INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

このコマンドは、mysql.slow_log テーブル内のすべての行を CSV ファイル /path/to/file.csv にエクスポートします。

ヒント

  • pt-query-digest などのツールを使用して、mysql.slow_log テーブルデータを分析できます。
  • mysqldump コマンドを使用して mysql.slow_log テーブルをダンプできます。
  • performance_schema スキーマには、events_statements_summary_by_digest テーブルなど、mysql.slow_log テーブルよりも詳細なパフォーマンス情報を提供するテーブルがいくつかあります。


例 1: slow_query_log システム変数を有効にする

SET GLOBAL slow_query_log = 1;

例 2: long_query_time システム変数を設定する

SET GLOBAL long_query_time = 2;

例 3: mysql.slow_log テーブルのすべての行を選択する

SELECT * FROM mysql.slow_log;

例 4: 特定の列を選択する

SELECT start_time, secs, user, host, sql_text FROM mysql.slow_log;

例 5: mysql.slow_log テーブルのデータを CSV ファイルにエクスポートする

SELECT * FROM mysql.slow_log INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

例 6: mysqldump コマンドを使用して mysql.slow_log テーブルをダンプする

mysqldump -u root -p mysql mysql.slow_log > /path/to/file.sql

例 7: pt-query-digest ツールを使用して mysql.slow_log テーブルデータを分析する

pt-query-digest /path/to/file.sql

これらの例は、mysql.slow_log テーブルを使用する基本的な方法を示しています。 具体的なニーズに合わせてクエリを変更してください。

  • パスワードの入力を求められた場合は、MariaDB 設定で設定したパスワードを入力してください。
  • root ユーザーとして実行するか、適切な権限を持つユーザーとして実行してください。
  • これらの例を実行する前に、MariaDB がインストールおよび構成されていることを確認してください。


mysql.slow_log テーブルは、パフォーマンスの向上に役立つ貴重なツールですが、いくつかの制限があります。

  • 精度
    mysql.slow_log テーブルは、すべてのクエリをキャプチャしない場合があります。
  • スケーラビリティ
    大規模なデータベースの場合、mysql.slow_log テーブルは管理が困難になり、ディスク領域を大量に消費する可能性があります。
  • オーバーヘッド
    mysql.slow_log テーブルへの書き込みはパフォーマンスに影響を与える可能性があります。

これらの制限により、mysql.slow_log テーブルの代替手段を検討する必要があります。 以下に、いくつかの代替手段をご紹介します。

Performance Schema

Performance Schemaは、MySQL 5.0.7以降で導入されたスキーマであり、データベースのパフォーマンスに関する詳細な情報を提供します。 events_statements_summary_by_digest テーブルなど、mysql.slow_log テーブルよりも多くの情報を提供するテーブルがいくつかあります。 Performance Schema は、mysql.slow_log テーブルよりも効率的でスケーラブルです。

General Query Log

General Query Logは、すべてのクエリを記録するログファイルです。 mysql.slow_log テーブルよりも詳細な情報を提供しますが、分析がより困難になる可能性があります。

サードパーティ製ツール

Several third-party tools can be used to monitor and analyze MySQL performance, such as:

  • SolarWinds Database Performance Monitor
    商用ツールで、パフォーマンス監視、分析、アラートなどの機能を提供します。
  • MySQL Enterprise Monitor
    商用ツールで、パフォーマンス監視、分析、レポートなどの機能を提供します。
  • pt-query-digest
    オープンソースのツールで、mysql.slow_log テーブルと Performance Schema データを分析できます。

最適な代替手段を選択

最適な代替手段は、個々のニーズによって異なります。 Performance Schema は、多くの場合、mysql.slow_log テーブルの優れた代替手段となります。 より詳細な情報が必要な場合は、General Query Log またはサードパーティ製ツールを検討してください。

オプション長所短所
mysql.slow_log テーブルセットアップと使用が簡単オーバーヘッド、スケーラビリティ、精度に問題がある可能性がある
Performance Schema効率的、スケーラブル、詳細な情報セットアップが複雑な場合がある
General Query Log詳細な情報分析が困難な場合がある
サードパーティ製ツール詳細な情報、高度な機能コストがかかる場合がある