2026年8月29日
2026年8月29日
MySQLのスロークエリログを有効にして解析する方法
はじめに
MySQLはウェブサイトやアプリケーションで広く利用されるデータベースシステムですが、不適切なSQLクエリが大量の負荷をかけ、パフォーマンスの低下を引き起こすことがあります。そのような問題を発見し、修正するためには「スロークエリログ」を有効にして解析することが重要です。
症状・背景
スロークエリログが必要になる主な場面は以下の通りです:
- 不明なパフォーマンス低下が発生した場合
- クエリの実行時間やメモリ使用量が異常なほど高いケース
- データベースの全体的な負荷が増加しているのに原因がわからないとき
手順・設定方法
ステップ1: スロークエリログの有効化
# まず、my.cnfファイルを開きます。通常は/etc/my.cnfまたは/etc/mysql/my.cnfにあります。
sudo nano /etc/my.cnf
# [mysqld]セクションを追加または確認し、次の行を追加します。
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
# long_query_timeはスロークエリとしてカウントされる最低限のクエリ実行時間を秒で指定します。上記では2秒です。
ステップ2: ログファイルの設定
# クエリログの保存先ディレクトリが存在しない場合は作成します。
sudo mkdir -p /var/log/mysql
# 必要であれば、ログファイルへのアクセス権限を設定します。
sudo chown mysql:mysql /var/log/mysql/slow-query.log
# ステップ1で設定した値を保存してMySQLサーバーを再起動します。
sudo systemctl restart mysql
ステップ3: 実行時間に応じたログ設定
# もし必要であれば、クエリの実行時間をより詳しく分析したい場合は、以下の設定を行います。
[mysqld]
log_queries_not_using_indexes = 1 # インデックスを使わないクエリも記録します。
# 上記を保存してMySQLサーバーを再起動します。
sudo systemctl restart mysql
ステップ4: 実践/トラブルシュート/監視
# スロークエリログが正しく動作しているか確認します。
mysql -e "SHOW VARIABLES LIKE 'slow_query_log';"
# ログファイルを表示して、不適切なクエリを見つけて修正します。
tail -f /var/log/mysql/slow-query.log
# または、MySQLの慢性的な問題を特定するために、以下のSQLクエリを使用します。
mysql -e "SELECT * FROM information_schema.processlist WHERE command = 'Query';"
注意事項
- スロークエリログは大量のデータを生成する可能性があるため、定期的にバックアップと削除を行うことを推奨します。
- ログファイルへのアクセス権限を適切に設定し、セキュリティ上のリスクを軽減しましょう。
- MySQLサーバーのパフォーマンスが低下しないように注意してください。必要であれば、
long_query_timeなどの値を調整することがあります。
まとめ
1. スロークエリログの有効化: MySQLのパフォーマンス問題の特定と修正に不可欠です。
2. ロギング設定の詳細: クエリ実行時間やメモリ使用量をより詳しく把握するために、必要なオプションを設定します。
3. ログの解析: 不適切なクエリを見つけて修正することで、データベースのパフォーマンスを改善できます。
4. セキュリティと管理: ログファイルへのアクセス権限を確認し、不要な情報を削除するなど、セキュリティ対策を行います。
関連記事: