💻

glep わかんないけど ISUCON に参加してみた

2023/11/26に公開

glep( ^ω^)ワカンナイオ

ようこそ、ISUCONへ

ISUCON13に参加してみました。
メンバーは以下の通り。

  • インフラ強強エンジニア(新卒1年目 Go書ける)
  • インフラ強強エンジニア(新卒1年目 Go書ける)
  • ワイ(ボトルネック PHPしかわかんない)

結果、がんばりました( ^ω^)

はじめに

なにもしてない、むしろ何もできなかった( ^ω^)ビエェッ

インフラ強強エンジニア2人が必要なツールをすべてセットアップしてくれた
ワイは873ポート開けた(だけ)

役割分担

ワイはGo読めない( ^ω^)
インフラもわかんない( ^ω^)
なので、DB担当したンゴ

  • 1人目:全体監視、指示出し、Goでボトルネック調査と解消
  • 2人目:GoとDB調査してボトルネック解消
  • ワイ :DB調査(というかインデックス貼り貼りするだけ)

(ワイの)具体的な作業の流れ

  1. ベンチマーク回す
  2. pt-query-digest の結果見て遅いクエリを確認
  3. EXPLAINしてみる
  4. インデックス貼り貼り
  5. ベンチマーク回す(無限ループ)

ペタペタしました( ^ω^)

やっちまったこと

反映されたか確認しなかった

ベンチマーク走らしたらDBリセットされて、変更が反映されていると思った
けど違った( ^ω^)アー
TRUNCATEはされていたが、DROP & CREATE テーブルはされておらず、エラーが出なかったので勝手に反映されたものだと思いこんでいた・・・
変更されたかどうかは、ちゃんとチェックしよう(戒め)

一気に貼りすぎた

片っ端から外部キーを貼った、これは良くなかった
エラーが解消できず、一旦元に戻して一つずつ変更して確認していくことになった
最初から1つずつ変更して確認するという流れを取るべきだった

テーブルを増やした後処理が漏れていた

別箇所のチューニングをした際にテーブルを増やした
CREATE文と初期データのINSERTDROPは書いたが、データを初期化するためのDELETEAUTO INCREMENTのリセット処理が漏れていた
これが原因で、他の人の修正結果が確認できず、せっかくのチューニングがポシャった( ^ω^)スマネェ...

他にやったこと

大半のチューニングやセットアップ、データの同期処理などは強強メンバーが全部やってくれた( ^ω^)マジアリガテェ
なのでワイはインデックスぺたぺたしたのと、Goの処理のチューニングをちょいお手伝いしたぐらい
※ といっても更新処理と取得のUPDATE文とSELECT文を書いたぐらい

あとは、データ初期化でTRUNCATEしていた箇所を、DELETEに変えたぐらい
外部キーを貼った都合上、DELETEのほうが良かった

結果

楽しかった( ^ω^)
できないことは多く、完全なボトルネックを演じていたが、リベンジしなければならんという気に捺せられた
もっと詳しくなりたいンゴ( ^ω^)

Discussion