短時間の完全な slow log を取得し pt-query-digest で分析する
MySQLパフォーマンスコマンド
-- Temporary full capture (e.g. 10 minutes); only new connections are affected
SET GLOBAL slow_query_log_file = '/var/lib/mysql/slow.log';
SET GLOBAL log_slow_extra = ON;
SET GLOBAL long_query_time = 0;
SET GLOBAL slow_query_log = ON;
-- ... then return to the normal threshold
SET GLOBAL long_query_time = 1;
# Shell: top 10 queries by total time
pt-query-digest --limit=10 --order-by=Query_time:sum --noversion-check /var/lib/mysql/slow.log > /tmp/digest.txt
pt-query-digest --since='2026-10-08 09:00:00' --until='2026-10-08 10:00:00' --filter '$event->{db} && $event->{db} eq "shop"' --report-format=profile --noversion-check /var/lib/mysql/slow.log概要
long_query_time=0 で短時間すべてのクエリを記録する。pt-query-digest がフィンガープリントごとにグループ化し、合計 / 平均 / p95 時間、examined 行数、サンプルクエリを含むランク付きレポートを生成する。
使用する場面
performance_schema digest では不十分な場合: 完全なステートメントテキストと実際のパラメータによる分析、デプロイ前後の比較、別ホストでのオフラインレビュー。
注意
long_query_time はセッション開始時にグローバル値からコピーされるため、プール内の既存接続は再接続するまで新しいしきい値を認識しない。long_query_time=0 は高負荷サーバーで毎秒数千件のエントリを書き込むため、ディスク容量と IO を監視し、期間を短く保ち、必ず元に戻す。分析用にファイルを本番環境の外にコピーする。pt-query-digest を実行するユーザーにはファイルの読み取り権限 (mode 640、mysql:mysql) が必要。