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 | 詳細な情報 | 分析が困難な場合がある |
サードパーティ製ツール | 詳細な情報、高度な機能 | コストがかかる場合がある |