Tuningathon#5 に参加してきた

チューニンガソン#5に参加してきました。

11:45

お題発表と同時にチューニングスタート。今回はMySQLのチューニング。内心喜ぶ。PHPでできたシステムのチューニングとかだと門外漢すぎて5時間勉強で終わりそうでしたし。

12:00すぎ

ざっくり課題を把握して、環境の構築開始。githubからconfigファイルをcloneしてオレオレ環境を作ろうとしたけど、相方と同じ環境で作業するので最小限(tmux, zshくらい)にとどめる(方針だけ決めてお互いの環境で作業すればよかったとのちのち思った)。

お題発表の時点で、MySQL-5.6.9-rcを使ってみようという考えがあったので、yum でビルドに必要なライブラリやビルドツール一式をインストール。

その頃に相方が到着して、データダンプとかmy.cnfとかのチェックをお願いする。

14:00くらいまで

課題は、Wikipediaのデータが入った2つのテーブルをjoinしてるクエリが5つありその総クエリ時間を短くするというもので、まぁindexあたってないとかで、最初の3つくらいはさくさくindex当てて、4つめ5つめのGROUP BYしてるどう考えても遅いクエリのチューニングにとりかかる。

15:00過ぎたあたり

このまま4つめ、5つめのクエリがなんとも解決せずなので、そろそろ5.6.9-rcインストールの開始。 若干5.5の環境と共存させるのにもたつく。

explainするとjoinが最適化されててindex当てなくてもある程度高速にはなってるのが面白かった。

17:00くらいまで

最終スコアが13sくらい。最後までひたすらindexあてては調整するみたいな作業をしてた。

結果発表

ランクインした人たちの総評を聞いていると、2テーブルのindexすべて外して、必要なindexだけ当てて、あとはmy.cnfのチューニングで差がつくみたいな感じだった。

Unique Key制約外していいんですか。そうですか。。。(試しに外すと8sに)

所感

  • 5.6.9-rcをしっかり使えたので良かった。ただ、5.5から5.6への移行は結構ヘビーな感じがするので、アプリを作るときは最初から5.6.9で作ったほうが無駄なindexとか増えずにすむと思う
  • 不要なindex外すというのはやっぱりチューニングするときに頭にいれておかないといけないことだなぁ
  • AWSのExtra Largeインスタンスを気前よく使わしてもらえたのは嬉しいなーと
  • 次回移行もMySQLのチューニングはお題として、今度はSELECTだけじゃなくてUPDATEやINSERT、DELETE含めてとのことで面白そう
  • MacBook Air 11inch はやっぱり画面小さいのでつらかった。13inch くらいがちょうど良いと改めて実感する
  • 持ち物に書いてる諦めない気持ち、大事
  • 次回はリベンジします