isucon10予選、おつかれさまでした。
チーム名はコーヒーフロート。ひとりぼっちの初参加です。
最高得点は718点で、最終得点は662点。
感想
終了後に他の参加者のdiscord上での会話やブログを追って読むと、「そもそもそんなアプローチ閃かなかった!」と思えるものが多く、いかに自分が狭い範囲で戦っていたのかと悔しい気持ちになりました。
一方で、いざというときにそのカードが切れのるかというのは日々の積み重ねだとも思っています。そういった意味だと、自分がいざというときに戦える範囲を認識できたのは良かったです。
そもそも「他の人が行った有効なアプローチを自分も思いつけば出来たか」と自問するとそんなことは全くなく、「思いついたとしても出来なかった」ことが多いと思っています。しっかり復習していきます。
isuumo、とても楽しかったです!
運営の皆さん、ありがとうございました。
時間毎の出来事
12:00 ~
- レッドブルの蓋を開ける。
- 開始直後にportalサイトが502になる。
- 当日マニュアルが配布されていたのでそれを熟読。
- portalサイトにアクセス出来るようになるがportal上からサーバーリストが閲覧出来ない。
- マニュアルにチームIDごとのサーバー情報が記載されていたので、それを正としてlocalの
~/.ssh/config
設定。
- マニュアルにチームIDごとのサーバー情報が記載されていたので、それを正としてlocalの
- ようやくサーバーに入る。
- 参考実装の切り替えをデフォのgo -> rubyに変更。
- サーバーの構成と対象のappのコード眺めつつ、ブラウザでapp触る。
- 12:51にディレクトリ毎localに落として、initial commitをする。
- 今回rubyを選択したのもあり、rubyディレクトリだけ落としていた。
13:00 ~
- 13:00ちょうどにnewrelicの設定をする。
- mysqld.confをlocalに落としてきて、設定変更・再起動。
- query_cache系の変更。
- slow_query系の変更。
long_query_time=0.01
にしてほぼ出力するようにした。
14:00 ~
- unicornの設定をゴニョゴニョいじる。
- unicorn起動しなくなり焦る。
- systemdのserviceだったことを完全に忘れていた。
/etc/systemd/system/isuumo.ruby.service
をlessで見て、心を落ち着かせる。
- systemctlでサービスを起こす。
- nginxの設定ファイル落としてきて、ファイルキャッシュ等の設定。
15:00 ~
- 初回ベンチマーク回せるようになった。初回スコアが602。
mysqldumpslow
でslowqueryを眺めたり、newrelicを眺めたり、nginx/access.log眺める。- 各テーブルにINDEXを作成する。
- app側のsqlを修正。
16:00 ~
- nginxでbotアクセスを弾くようにする。
- 細かい修正ミスが目立つようになり焦る。
- 喫煙のため離席をする。
17:00 ~
explain
でINDEX使われているか確認すると、全く使われていないことに気づく。- いや、そもそもpossible_keysに何も出ていない。
POST /initialize
されると、データ再生成されるのは雑に把握していたけど、DROP DATABASE
していることにようやく気づく。mysql/db/0_Schema.sql
にINDEX作成するステートメント書く。
18:00 ~
- app側で出来る高速化が無いか色々試す。
- newrelic上で重いエンドポイントを確認する。
GET /api/chair/search
GET /api/estate/search
POST /api/estate/nazotte
- nazotteの改善に挑戦するも時間内で解決策が見つかるとも思えず断念。
19:00 ~
- search系なら行けるだろうと思って色々試す。
- 重いクエリをslow_query.logから引っ張り出し、
FORCE INDEX
付けてexplainをしたりする。- 良さそうな結果が得られたものはapp側で
USE INDEX
orFORCE INDEX
付けてみてベンチマークを回してみる。
- 良さそうな結果が得られたものはapp側で
- 深みにハマっていく。。。
20:00 ~
- 自己最高の718点をマーク。
- しかし、いろいろいじっていたらスコアが600台前半くらいまで落ちて泣きそうになる。
- newrelicなどパフォーマンス計測用処理などをコード内から削除していく。
- 苦し紛れに最後回したら662点。
21:00 ~
- 再起動出来ることの確認。