ISUCON10 予選通過しました #isucon
チーム名 hidekiy で、 @kotaroy と ISUCON10 予選に参加して、何とか通過しました。 ブログ記事の募集期間が終わらないうちに、当日の行動について記録しておきます。 タイムライン 12:20 予選開始 仕様把握、なぞって検索が本丸っぽい予想。 不要そうな node_modules, target を抜いて、コードを Git 管理する。SSH のエージェント転送で連れてきた鍵を使って、サーバーから直接 GitHub にアクセスしてデプロイとかやる事にする。 サンプルの SSH の設定ファイルに、8081~8083 でそれぞれのサーバーのポート80を開けるようにする設定を入れた LocalForward を追加してチーム内に共有した。 14:00 去年のISUCON予選1位チームのありがたい記事 ISUCON9 予選を全体1位で突破しました で学んだ Cloud Trace, Cloud Profiler をまず設定する。New Relic はプロファイルが取れれば不要と思ったんで、入れない事とする。リソース監視は top を更新間隔1秒で目視確認して行う事にした。 いずれ問題になってくると思ったんで、nginx.conf でのボット対策を依頼した。 15:00 検索機能がクソ重い事分かったんで、ソート用にいくつかインデックスを追加 (EXPLAIN 確認してない) MySQL サーバーのスレーブ追加を依頼 16:00 なぞって検索のN+1クエリについて、1段目のクエリのWHERE条件に、後段の条件を追加する感じで修正して対応した。 SELECT * FROM estate WHERE latitude <= ? AND latitude >= ? AND longitude <= ? AND longitude >= ? AND ST_Contains(ST_PolygonFromText(%s), ST_GeomFromText( CONCAT ( 'POINT(' , latitude, ' ' , longitude, ')' ))) ORDER BY popularity DESC , id ASC latitude, lo