ISUCON12-予選に参加しました
最終スコアはFailedしたことで0点でした。
準備
前回と異なり7月になってしまったことで準備には全く時間を割けませんでした。
当日
10:00 ~ 11:00
pprofの導入や自動デプロイの設定を行いました。
事前に何もしていませんでしたが前回に参加したときの記憶を頼りに結果として前回と変わらない時間かかりました。
11:10~13:00
プロファイルを確認するとplayerHandlerに時間がかかっていたのでこの部分を1度のselectで取得できるように変更しました。
初期状態
変更後
変更箇所が多くあり、かなりの時間を使ってしまいました。
13:00
11時の時点でMySQLへの変更は考えていて、時間がかかるので後回しにしていましたが、SQLiteを使用している限り分散は難しいと判断し、ここから移行に必要なものを考え始めました。
tenantDBは分散しやすい構成だったので2台使用することにしましたが、SQLiteの初期データが大きくそれでも読み込みに時間がかかりました。
SQLiteのdumpではinsertがまとめられておらず非常に時間がかかるものだったので一度のinsertに変換したもので読み込みを行いましたがこれも時間がかかり、tsvをmysqlimportで読み込むことにしました。
これも数十分かかりましたが最終的にこの方法で読み込むことができました。
initializeの度にこれだけ時間がかかると30秒にはとても間に合わないので/var/lib/mysqlのフォルダをコピーしてリストアを行う方式で初期化を行うことにし、30秒に間に合わせました。
17:15~17:47
isuports.goを編集し、上で準備したMySQLを使用するように変更を行いました。
17:47時点でSQLiteからMySQLへの移行は完了しましたが、同時に進めていた別の部分のSQLでエラーが出るようになり、ここから18時まで修正を試みましたが間に合いませんでした。
この最後に出たエラーは、クエリ中で一つのcolumnをrankと名前を付けてあり、SQLiteでは問題無いもののMySQLでは関数名と被ってエラーが出るというものでした。