1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

CyberAgentの2daysインターンでパフォーマンスチューニング大会してきました!!

こんにちは!
大学3年生のコータです!!🔥

先日CyberAgentの2daysエンジニアインターン(サーバーサイド)に参加しました!

今回は面白かったことと、学びをアウトプットしていきます!!
image.png

面白かったこと&よかったこと

  1. 事前面談による目的設定
  2. メンターの人たちが優しい
  3. LTや事業説明と、開発の進行具合が作り込まれていた

詳しくいきます!!

1. 事前MTGによる目的設定

インターンの1週間前に事前面談をしました。

そこでメンターの方と「インターンに参加する目的」決定、、

結果、めちゃめちゃ目的意識を持てていたのですごくよかったです!

2.メンターの方々が優しい

とにかくメンターの方々が優しい!!!

「つまってるところはないですか?」
「メンターのことこきつかっちゃってください」

冗談ぽく聞こえるけど、体現してくれていてほんとに助かりました、ありがとうございます><

3.LTや事業説明と、開発の進行具合が作り込まれていた

タイムスケジュールがめっちゃよかったです。
事業グループや構成もだいぶわかりました!

また、競技中では1日の終わりに開発の解説などを入れてくれてすごくありがたかったです。

終盤のパネルディスカッションでは学生が聞きたそうな質問を、人事の方が予め準備してくれていて、それを学生が聞いているという感じでした!

最後の社員交流会で聞けなかった内容を聞けたのですごく満足です♪

学び

  1. sshすればvscodeでコーディングできる
  2. Indexを貼ればqueryが著しくよくなる
  3. peekやmapの中でsqlを一回ずつ叩く処理があるなら、外でごっそり持ってくる(sqlとのやりとりの回数を少なくする)
  4. Alpを使ってログ解析ができる
  5. Nginxの設定を変えると早くなる
  6. MySQLのスロークエリログを使用することで、重たいクエリがわかる、秒数の設定もできる

詳しくいきます!

1. sshすればvscodeでコーディングできる

今回は、sshのホストとuserIDとpasswordを渡されたので、とりあえずsshしてみたのですが、いきなり大変。
何がどこに入ってるかわからないし、そもそもvimでコーディングしたことないし、、、

そんな時に、教えていただいたのが、vscodeの拡張機能「Remote -ssh」です。
これで一気にいつものエディター画面に行けました。
鍵生成とか、scpとか、chmodで編集権限を与えないとダメですが、それでもvimよりかは慣れているエディタでコーディングできるのは強いです。

僕は2日目の昼過ぎに気づいたのでもっと早くやっていればよかったです、、、🚶‍♂️

2. Indexを貼ればqueryが著しくよくなる

クエリが遅くなったりしている時はクエリ取得のロジックがよくないか、Indexが貼れてない時が多いです。
今回の競技では適切な箇所にindexを貼るだけで、時間がかかったリファクタよりも点数がゴリっと上がりました。

indexの大事さを改めて痛感。。。

3. 繰り返しの中で何度もSQLにアクセスしてたら、外でごっそり持ってきちゃう

これはありがちなN+1問題ですね、Joinとか外でゴリっと持ってくるのが良いです。
Railsでもeager_loadとかちゃんと意識しようと思いました。

4. Alpを使ってログ解析ができる

ベンチマークっていうテスト?的な実行コマンドが用意されてて、そのコマンドとかボタンを押すことで、自分のチューニングしたアプリの点数が表示されるのですが、実行したNginxのログが出力されないと何もできません。そこで登場するのがログ解析ツールのAlpです。

こちらに詳しく記載されているので、nginxのログの解析や、ISUCON出場するなら事前準備しておいた方が良いと思います。
以下の場合だったら、tag/120の時のAVGが高いので、ここに関係しているクエリやロジックをみていく流れになります。
image (4).png

5. Nginxの設定を変えると早くなる

ぶっちゃけ自分のインプット足りなくて、そもそもnginxってなんなのかあんまりわかってなかったのですが、nginxの設定を変えると早くなりました。
時間もなかったのでこちらのGithubから参考にしたのですが、インターン先のプロダクトの設定とかをみてインプットを深めようと思います。

6. MySQLのスロークエリログを使用することで、重たいクエリがわかる、秒数の設定もできる

この日までMySQLの「スロークエリログ」の存在すら知らなかったのですが、どうやらMySQLチューニングでは基本らしいです。。。><

時間を設定して、その時間をオーバーしたクエリを作成したファイルに出力してくれます。
これで、重たいクエリを潰せるというわけですね!!
いやー便利なこった😎
プルリク出す前に確認することにします!!!!

終わりに

ここまで読んでくださりありがとうございます!!

僕の目標は「チューニングの目的と効果が理解でき、自分のバイト先に適応できるようになってる 」ということが目標だったので、かなり達成できたと思います。

これからも楽しく精進していくぞおおおおお

最後に、僕自身競技をしたことがなくて、右も左もわからなかったのですがメンターの方々が支えてくださってすごく楽しかったです!!ありがとうございました😁

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?