ISUCON練習日記2021-02-22 ISUCON10予選
ISUCON10予選問題で練習した。色々忘れないようにメモ。
流れ
- アプリ立てる
- ベンチ流す
- ベンチスクリプトで各データが自動で取れるようにしていく
- nginx
- app measure
- slow query
- netdata
他に自動化したい部分
- app log
- index
- explain
インスタンス複製
- スナップショット取得
- 同様のインスタンスを作成
- オプション:静的IP付与
これも自動化したい。
最新のGoインストール
最新版のGo言語をLinuxにインストールする手順をやった上で、パスが変わってなかったので以下をやる。
sudo rm /usr/bin/go export PATH=$PATH:/usr/local/go/bin go version
でもsnapを使うほうが楽かも
sudo snap install --channel=1.16/stable --classic go snap info go
slack通知でファイルを飛ばす
Slackのfiles.upload APIを使ってファイルを簡単に連携する - バナーナナブログ
OAuth & PermissionsでBot Token Scopesにfile:write権限を追加したけどうまく行かず、User Token Scopesの方に追加したらいけた。
curl -F file=@/home/isucon/pt.log -F channels=#notify_stats_result \ -H "Authorization: Bearer xoxp-hogehoge" https://slack.com/api/files.upload
MySQLWorkbenchで表示してみる
・クライアント上にツールインストール
・サーバ上で次のコマンド実行
sudo grep bind /etc/mysql/ -rni sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf bind_addressをコメントアウト sudo mysql -e "grant all privileges on isuumo.* to isucon@'%' identified by 'isucon' with grant option;" sudo systemctl restart mysql.service
インデックス追加
スロークエリで出てくる
SELECT * FROM chair WHERE stock > 0 ORDER BY price ASC, id ASC LIMIT 20
用に
INDEX stock_price_id (stock, price, id)
を貼った場合、さらにINDEX price_id (price, id)
を貼った場合の実行計画。
mysql> mysql> explain SELECT * FROM chair WHERE stock > 0 ORDER BY price ASC, id ASC LIMIT 20; +----+-------------+-------+------------+------+----------------+------+---------+------+-------+----------+-----------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+----------------+------+---------+------+-------+----------+-----------------------------+ | 1 | SIMPLE | chair | NULL | ALL | stock_price_id | NULL | NULL | NULL | 29281 | 50.00 | Using where; Using filesort | +----+-------------+-------+------------+------+----------------+------+---------+------+-------+----------+-----------------------------+ $ sudo mysql -e "use isuumo; explain SELECT * FROM chair WHERE stock > 0 ORDER BY price ASC, id ASC LIMIT 20;" +----+-------------+-------+------------+-------+----------------+----------+---------+------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+----------------+----------+---------+------+------+----------+-------------+ | 1 | SIMPLE | chair | NULL | index | stock_price_id | price_id | 8 | NULL | 40 | 50.00 | Using where | +----+-------------+-------+------------+-------+----------------+----------+---------+------+------+----------+-------------+
Using filesortはクイックソートのことらしい。 漢(オトコ)のコンピュータ道: Using filesort