Developerこの広告は、90日以上更新していないブログに表示しています。本選で4位になれました去年に引き続き今年もISUCONの本選に参加することができました。今年の予選は全体の31番目でギリギリ本選は出れないところでしたがmotemen.hatenablog.comこの方々の誠実さのおかげで本選に出れることになりました。繰り上がりで出ることになり、この方々の分も、とか、ワンチャン敗者復活からの優勝を果たしてサンドウィッチマンみたいに...!とか思ってました。4位!あと1000点で賞金圏内の3位だったって思うと少し悔しいですが、大健闘できました。ちなみに去年の本選は24位くらいで、得点が出たチームの中での下から2番目くらいでした。dbbは使えなかった、という感じだった気がします。当日の記憶が怪しいですが。いうことから始めます。去年の本選はSNS告知(だったかな?)のフラグに最後まで気付かないという失態を犯していたので、とりあえずコード読まないと話にならんという学びがありました。コードを読みながら、どうせ使うだろうということでRedisの導入をしたり、NewRelicの導入をしてもらったりしてました。今回の問題はデフォルトで貼られているインデックスがほとんど無く、初期状態ではベンチマークが回らない前提だったのでベンチを回す前にクエリを見て最低限のインデックスを貼っていきます。変えたりしましたが、ベンチが通らないので日和って戻したりしてた気がします。ベンチマークのエラーメッセージが何を言ってるか分からずベンチのバグなのかこちらのバグなのかの切り分けのために運営に聞いてみたりしました。仕様だということで理解。何が不正なのかが分からずデバッグのしようも無いのでなかなか苦しかった。後で分かりましたが、ベンチが通らなかった理由は元々KEYが無かったテーブルにインデックスを追加したことで、取得する順番が変わってしまったのようです。いう感じでちょっと何言ってるか分かんないですね。byをつけて解決したようです。byをつけたらベンチが通ったのでしょう。train_nameがvarcharなのでインデックスでおかしくなったので、intに変換してあげれば多分通ったんじゃないかな、という気がしてますが試してみたいですね。結局ベンチマークが初めて通ったのは12:58:36でした。1,138ベンチが通ってようやくパフォーマンス改善に取り組めるようになったので、N+1の改善とクエリの実行計画の改善、master系のテーブルの中身をメモリ上に乗せてRedisもMySQLも叩かなくていいようにしたりしてました。50にあげてみたところ、スコアは4,374まで上昇。処理できたところでキャンセルは得点が低いから別の方を優先したいという理由で捨てました。辺りまで絞れてきたのでこの辺の改善をしていくことに。9,529と順調にスコアを上げられていきました。available_daysをもうちょっと上げて別の問題が出るかどうか見た方がいいんじゃないか、まだやれることはあるし後でいいんじゃないか、という葛藤を脳内でずっとしてましたけど、堅実にやれることから潰していったのは良い判断だったかな、と思います。上げることができました。追加し忘れてるインデックスがあることに気付いたのはラッキーでした。このまま行ってたら再起動試験後にひどいことになってしまうところだった。変更とベンチマーク実行を繰り返してましたが、結局available_daysは70に落ち着きました。まで上がっててちょっと驚きました。メモリとかの問題かな。締め去年からISUCONに出始めて、2年連続で本選にまで出れてめっちゃ楽しかったです。来年は今のところ出ないと思いますが、機会があれば是非また出たいですね。先月ISUCON9の予選に参加して予選突破しました。環境セットアップ月別アーカイブはてなブログをはじめよう!shmurakamiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。