あまブログ

ドキドキ......ドキドキ2択クイ〜〜〜〜〜〜〜ズ!!

ISUCON13に参加しました(最終スコア6909点)

2023/11/25に開催されたISUCON13に参加しました。(チーム名:gogo511)

最終スコアは6909点で、(多分)351位でした。

isucon.net

事前準備

  • メンバー全員ISUCON初参加。とりあえず参加してみてインフラ周りの勉強になったらいいねくらいの感じでした。
  • 自分は開催の約3週間前にチームに招待してもらって、そこで初めてISUCONを知りました
  • 開催の約2週間前にとーふとふさんが運営するISUCON精進鯖に参加させていただきました。
  • 11/13くらいからISUCONの勉強を始めました。ISUCON本事前講習2022座学ISUCON初心者向け講習会private-isu辺りを参考に合計20時間くらい勉強しました。
  • 11/23にチームで10:00~18:00通しでprivate-isuをやりました。ここで初めてAWSで環境構築しました。この日はサーバからGitHubにpushできなくて終了。初手ベンチ回したのみでスコア改善できず。本番でのチームの目標は「スコア改善を1回する」。通しの作業はめちゃくちゃ疲れました。
  • 個人の目標としてはどんな形で終わってもいいから8時間全力で取り組む。

当日やったこと

github.com

  • 10:09
    • 当日マニュアルに沿ってポータル上からAWS CloudFormationのテンプレをダウンロードして、スタックの作成まで完了。
  • 10:29
    • サーバ構築したメンバーの端末からサーバへSSH接続。検証用のコマンドを実行して正しく起動していることを確認。
  • 10:47
    • 他のメンバーの端末からサーバへSSH接続する方法がわからずまごつく。サーバ構築したメンバーの端末から引き続き操作することに決定。
  • 11:01
    • 当日マニュアルに沿って/etc/hostsを編集。ブラウザからISUPipeにアクセスしてアプリケーションの動作確認完了。
  • 11:08
    • サーバ1でベンチ実行→3690点
  • 11:33
    • 当日マニュアルの参考実装の切り替え方法に習って、サーバ1をRubyの実装に切り替え。
    • サーバ1でベンチ実行→4180点
  • 11:51
    • サーバ上にGitHub用の秘密鍵と公開鍵を作成。~/.ssh/configに設定を追加。
  • 12:33
    • リポジトリにサーバの公開鍵を追加。サーバ上からGitHubに接続できることを確認。
    • .gitignoreに不要そうなファイルを追加しようとする→けど各人の端末で全てのファイルを確認したいからwebapp配下全部アップでいいんじゃない?→webapp配下全部git addしたら動かなくなったのでctrl + Cでやめた→pushできることの確認としてwebapp/rubyだけアップした。
  • 13:15
    • 45分間の昼休憩。メンバー全員作業中止。
  • 13:47
    • サーバ1でベンチ実行中にtopコマンドを実行(ベンチのスコアは4003点)。mysqlがボトルネックになっていることを確認。
  • 14:19
    • /etc/mysql/mysql.conf.d/mysqld.cnfを編集してスロークエリログの設定(long_query_timeを0に変更)。
    • MySQLを再起動してスロークエリログの設定が反映されていることを確認。
  • 14:23
    • pt-query-digestをインストール。
  • 14:40
    • サーバ1でベンチ実行→pt-query-digestでログ解析
    • 最上位のSELECT livestream_tagsを改善していく。
  • 14:43
    • SHOW CREATE TABLElivestream_tagsテーブルの情報を確認。
  • 14:58
    • 該当のクエリをEXPLAINしてみた。EXPLAIN結果をChat GPTに投げた。
  • 15:05
    • livestream_tagsテーブルのlivestream_idカラムにindexを貼った。
    • サーバ1でベンチ実行→5538点
  • 15:14
    • pt-query-digestを再度実行して改善できてることを確認。
    • ログローテーションし忘れたが、pt-query-digestの結果を見る限り平気そうだったので以降もログローテしないで進めた。
  • 15:43
    • pt-query-digestの結果で最上位になったSELECT iconsを改善していく。
    • SHOW CREATE TABLEiconsテーブルの情報を確認。
    • 該当クエリをEXPLAIN。結果をChat GPTに投げた。
    • iconsテーブルのuser_idカラムにindexを貼った。
    • サーバ1でベンチ実行→6505点
  • 15:49
    • pt-query-digestを再度実行して改善できてることを確認。
  • 15:57
    • 試しに何もいじってないサーバ3でベンチ実行→3447点。
    • サーバ1で良い点出てるし、他のサーバはよくわからないからノータッチでいいやと判断。
  • 16:21
    • スロークエリログの設定を元に戻した。
    • サーバ1でベンチ実行→7150点
  • 16:33
    • pt-query-digestの結果で現在最上位のクエリをEXPLAINした。
  • 16:42
    • SHOW CREATE TABLElivecommentsテーブルの情報を確認。
    • EXPLAIN結果とテーブル情報をみてもよくわからないので諦めた。
  • 16:58
    • 全サーバでベンチ実行→サーバ1:6660点、サーバ2:3460点、サーバ3:3519点
    • 上記を最終スコアにすることにして、のんびり雑談。
  • 17:49
    • 当日マニュアルの「追試」を読んで、やっぱりサーバ2と3もスコア上げた方が良くない?となる。
    • サーバ1で行った2つの改善をサーバ2と3にも適用
    • 全サーバでベンチ実行→サーバ1:6909点、サーバ2:6699点、サーバ3:6516点
    • 最終スコア:6909点

感想・謝辞

感想

  • チームとしては2回スコア改善ができたので良かった。環境構築で躓いて1つも改善できないで終わるかなと思っていたので、そこそこ頑張れたと思う。
  • 本番はめちゃ疲れた。疲れるまでやり切れたので良かった。
  • index貼り以外もやろうとしたが、全然わからんかった...
  • AWSの見方全然わからなかった。サーバ3台どう使えば良いのかわからなかった。
  • 結局アプリケーションマニュアル全然読まなかったし、最初のアプリの動作確認以外ブラウザからアプリほとんど見なかった。(マニュアルは一番最初に読み込めって言われてたのに..)
  • 自分の端末からサーバにSSHできなくて詰まっていたが、結局予行演習でやったときと同じようにサーバ構築した人の端末だけで進めることにした。その後ずっと画面共有しながら進めたのでだいぶ大変だったけど、SSHで詰まってたらそこで終わってたかもしれないので、結果的に良かったのかな。本番の通話しながらの状態だと色んなこと考えちゃって集中するのが難しかった。
  • 17:00くらいからもうやること無くなってのんびり雑談していたが、ふとサーバ2と3にも適用した方がよくね?って思えたのは良かった。やったら一瞬だったし。意味があったのはかわからない。
  • これまでは漠然と「インフラ周り学習したいな」と思っていたけど、今回ISUCON13に参加したことでやるべきことがだいぶ明確になったのは良かった。今後はとりあえずISUCONの過去問で遊びながらインフラ周りの学習をしていこうと思う。

謝辞

  • チームメンバーの皆さん、チームに参加させていただきありがとうございました。ISUCONを知れて良かったです。
  • チームNaruseJunの皆さん、優勝おめでとうございます。とーふとふさんにはISUCON精進鯖で色々教えていただき、ありがとうございました。
  • 運営やスポンサーの皆さん、ありがとうございました。

追記(2024/1/12)

2024/1/11に行われたISUCON13 公式反省会にも参加しました。

ISUCON参加→ブログ書く→反省会参加→2次会参加

ISUCON13を完全制覇しました!