キュアセブン技術ブログ

考えたこと,学んだことを書きます

ISUCON用チートシート

散乱してたISUCONで使ったコマンドチートシートをまとめておく

ツール入れる編

NETDATA

インストール
$ bash <(curl -Ss https://my-netdata.io/kickstart.sh)
スタート・ストップ
To stop netdata run:

$ systemctl stop netdata

To start netdata run:

$ systemctl start netdata



解析編

アプリケーションログを見る

goのバイナリファイルがあるサーバーで

$ journalctl -fxu isuumo.go

f: tail -f 的な
x: 詳細情報
u: -u ユニット名

kataribe

kataribeでアクセスログを集計する
$ sudo cat /var/log/nginx/access.log | ./kataribe
kataribe grouping
[[bundle]]
regexp = '^(GET|HEAD) /recent/[0-9]+\b'
name = "get recent"

[[bundle]]
regexp = '^GET /api/contestant/notifications?.*'
name = "get /api/contestant/notifications?after="



db編

テーブルの調査

SELECT COUNT(*) FROM テーブル名;
show columns from テーブル名;

index貼る

CREATE INDEX インデックス名 ON テーブル名 (カラム名[, カラム名…])

# force index
SELECT * FROM t1 USE INDEX FOR JOIN (i1) FORCE INDEX FOR JOIN (i2);

# 貼れてるか確認
explain SQL;

pt-query-digest

サーバー上で

# 権限問題により/home/isuconに移動してる
$ sudo cp /var/log/mysql/mysql-slow.log /home/isucon/mysql-slow.log
$ chown isucon mysql-slow.log

ローカルで

$ scp isucon-app2:mysql-slow.log .
$ pt-query-digest mysql-slow.log > pt-query-digest.txt

mysqlの外からsql叩く

$ mysql -uユーザー名 -pパスワード -e "SQL"

LIMIT OFFSET BETWEEN ANDの入れ替え作業

LINIT 取得数 OFFSET 取得開始位置
BETWEEN 以上 AND 以下

動的プレースホルダを使ってmysql負荷を下げる

動的プレースホルダを使ってmysql負荷を下げる by pinkumohikan · Pull Request #11 · pinkumohikan/isucon-practice-20200816 · GitHub

interpolateParams=true

を設定する



Makefile

.PHONY: gogo kataribe slow-log

gogo:
    sudo systemctl stop h2o
    sudo systemctl stop torb.go
    sudo systemctl stop mariadb
    sudo truncate --size 0 /var/log/h2o/access.log
    -sudo truncate --size 0 /var/lib/mysql/mysql-slow.log
    make -C app/webapp/go build
    sudo systemctl start mariadb
    sleep 2
    sudo systemctl start torb.go
    sudo systemctl start h2o
    sleep 2
    ./app/exec_bench.sh
    $(MAKE) kataribe

kataribe:
    sudo cat /var/log/h2o/access.log | ./kataribe 

slow-log:
    sudo mysqldumpslow -s at -t 10 /var/lib/mysql/mysql-slow.log