ある日突然インフラを任されることになった人のための障害対応、パフォーマンス改善の基本
僕のようにある日突然インフラを任されることになった人のために、メモを残しておきます。
一度に書ききれないので、随時更新していきます。
環境
$ mysql --version
mysql Ver 14.14 Distrib 5.6.27, for debian-linux-gnu (x86_64) using EditLine wrapper
$ cat /etc/issue
Ubuntu 14.04.3 LTS \n \l
手順
アクセスログ解析
例えば、以下のコマンドでざっくりとしたアクセスログ解析ができます。
tail -f hoge.com-access.log | grep "GET /img" | awk -F "\t" '{print $1"\t"$2"\t"$4}'
hoge.com-access.log
の GET /img
が含まれているものを タブ区切り
で分割したときの
1番目と2番目と4番目の要素を出力するという意味です。
アクセスログをタブ区切りにしているのは、僕はアクセスログをltsvで管理しているためです。
ltsvに関しては↓を参考にさせていただいています。
http://d.hatena.ne.jp/naoya/20130209/1360381374
特定のIPから1秒間に何十アクセスと来ていたら攻撃されている可能性もあるので、IP拒否しましょう。 アクセス拒否に関しては、別記事で説明してリンクを貼っておきます。
slow query解析
long_query_time
は実行時間が n秒 以上のクエリという意味です。
以下の設定では、実行時間が1秒以上のクエリが
/var/log/mysql/mysql-slow.log
に出力されます。
$ mysql -u root -p
mysql > SET GLOBAL slow_query_log=ON;
mysql > SET GLOBAL slow_query_log_file='/var/log/mysql/mysql-slow.log';
mysql > SET GLOBAL long_query_time=1;
mysql > show variables;
上記設定をした後に、slow queryのログを確認します。
$ tail -f /var/log/mysql/mysql-slow.log
実行時間が長い順で、一覧でみたい場合は
$ mysqldumpslow -s t /var/log/mysql/mysql-slow.log
上記で確認できたクエリに対して、どこがネックなのかを洗い出して、クエリ改善を行います。
一言
便利な方法とかイケメン運用など教えていただけたら、土下座しに伺います。