kavo’s diary

備忘録

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を使ってファイルを簡単に連携する - バナーナナブログ

Slack API | Slack

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で表示してみる

isucon10参加記 | カオスの坩堝

・クライアント上にツールインストール

・サーバ上で次のコマンド実行

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