遅いMySQLクエリを確認する
スロークエリログを有効にしましたログを確認できます。ロギングを有効にしていない場合は、こちらの手順を参照してください。ログの分析
ログの場所:/var/log/slow-queries.log
#時間:210905 6:33:11#User @ Host:dbuser [dbname] @ hostname [1.2.3.4]#Query_time:12.116250 Lock_time:0.000035 Rows_sent:0 Rows_examined:201565 use dbname; SETタイムスタンプ= 1409898791; ...ここで低速クエリ...
上記の形式のエントリが数百とまではいかなくても数十ある場合、ログが膨大になる可能性があります。ログを読みやすくするには、 mysqldumpslowを使用してログを解析します。
mysqldumpslow -r -a /var/log/mysql/mysqld.slow.log出力には、時間、行、クエリなどの重要な情報が含まれます。
Count:2 Time = 20.54s(41s)Lock = 0.02s(0s)Rows = 12547802(0)、dbuser [dbuser] @localhost SELECT * FROM db_exp_table WHERE site_user_id = '214380' ORDER BY site_id DESC LIMIT 0,2 Count: 1 Time = 21.74s(21s)Lock = 0.01s(0s)Rows = 12547802(0)、dbuser [dbuser] @localhost SELECT * FROM db_exp_table WHERE site_user_id = '214380' ORDER BY site_id DESC LIMIT 0,2 Count:1 Time = 23.86s(23s)Lock = 0.20s(0s)Rows = 12547802(0)、dbuser [dbuser] @localhost SELECT * FROM db_exp_table WHERE site_user_id = '214380' ORDER BY site_id DESC LIMIT 0,2
上記の例を見ると、実行に20〜24秒かかるクエリが1つあります。これにより、サイトの読み込みに時間がかかる、タイムアウトエラーが発生するなど、問題が発生します。クエリは12,547,802行を調べています。 1200万行を超えるテーブルで大きなクエリ(select *)を実行すると、ユーザーエクスペリエンスが低下する可能性があります。クエリを最適化する(「コーヒーテーブル」を選択する)か、検査する行を減らす(古いデータをアーカイブする)と、クエリの速度が向上します。
ログファイルが大きい場合は、 mysqldumpslowを実行し、出力をファイルに保存します。これにより、 grepやfindなどの他のファイル操作ツールで確認しやすくなります。
mysqldumpslow -r -a /var/log/slow-queries.log > slow.log.parsed
次のステップ
遅いクエリログを確認すると、修正が必要な問題のあるクエリを把握できます。高いリソースを使用するMySQLでサイトの実行速度がまだ遅い場合、サーバーのリソースをより有効に活用するためにMySQLを最適化する必要があるかもしれません。
ログの処理が完了したら、 MySQLスロークエリログを無効にしてください。ロギングを有効にしておくと、MySQLリソースが不必要に消費され、潜在的にディスクが一杯になります(クエリに問題があるため)。
GoDaddyホスティングサービス
弊社のサーバーエキスパートがMySQLのスロークエリロギングを有効/無効にし、MySQLを最適化することができます。このサービスの詳細については、 GoDaddyガイドお手伝いします。