isucon4...

37
ISUCON4 予選問題でアプリ ケーションコードを変更せ ず、 ”my.cnf” 1 行だけ足し て、 予選通過ラインを突破 するの術 MySQL Casual Talks vol.7 ISUCON芸人 長野雅広 a.k.a kazeburo

Upload: masahiro-nagano

Post on 12-Jul-2015

5.022 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ISUCON4 予選問題でアプリケーションコードを変更せず、”my.cnf”に1行だけ足して、予選通過ラインを突破するの術

MySQL Casual Talks vol.7ISUCON芸人 長野雅広 a.k.a kazeburo

Page 2: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ISUCON知らない方?

Page 3: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Page 4: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

何を変更したのか• インデックスの追加

• アプリケーションをPerlに変更

• アプリケーションサーバの変更と起動設定のチューニング

• nginx での画像/CSS/JavaScript配信

• nginx <=> アプリケーションサーバ間をTCPからunix domain socket に

• my.cnfのチューニング

Page 5: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

もし、my.cnf を変更しなかったら?

Page 6: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

Benchmark04:02:01 type:info message:launch benchmarker04:02:01 type:warning message:Result not sent to server because API key is not set04:02:01 type:info message:init environment04:02:10 type:info message:run benchmark workload: 804:03:10 type:info message:finish benchmark workload: 804:03:15 type:info message:check banned ips and locked users report04:03:17 type:report count:banned ips value:61904:03:17 type:report count:locked users value:441304:03:18 type:info message:Result not sent to server because API key is not set

04:03:18 type:score success:189510 fail:0 score:40937

Page 7: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

40,937 / 37,808

予選通過ライン

( ゚д゚)超えちゃった

Page 8: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

タイトル変更

Page 9: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ISUCON4 予選問題でアプリケーションコードを変更せず、”my.cnf ”に1行だけ足して、さらに高得点を狙う

Page 10: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ISUCON4のアプリケーション

• いすこん銀行• ログイン機能のみ• パスワードリスト攻撃• ログイン失敗の多いIPアドレスを拒否、アカウントロックする

Page 11: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ISUCON4のアプリケーション

• MySQLからみると

• ログインログの書き込みが発生• 処理データ量は 40MB 程度

Page 12: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

MySQL のバージョン

$ rpm -qa|grep mysqlmysql55-libs-5.5.40-1.3.amzn1.x86_64mysql-devel-5.5-1.6.amzn1.noarchmysql55-server-5.5.40-1.3.amzn1.x86_64mysql55-common-5.5.40-1.3.amzn1.x86_64mysql55-5.5.40-1.3.amzn1.x86_64mysql55-devel-5.5.40-1.3.amzn1.x86_64mysql-server-5.5-1.6.amzn1.noarch 5.5.40

Page 13: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

my.cnf

[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksymbolic-links=0

max_allowed_packet=300M

[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

Page 14: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

1行追加するとしたら?やってみた

Page 15: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_buffer_pool_size = 1G

Page 16: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

41,359 / 40,937デフォルト 128MB なので増やすメリット大きくない

Page 17: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_#ush_log_at_trx_commit = 2

Page 18: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

45,053 / 40,937EC2 で Storageは HDD なのでIOが遅延できる効果は大きい

Page 19: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_#ush_log_at_trx_commit = 0

Page 20: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

45,792 / 40,937

“2” ですでに十分だった?

Page 21: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_#ush_method=O_DIRECT

Page 22: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

40,726 / 40,937

変わらない。次への伏線です

Page 23: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_#ush_method=nosync

Page 24: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

45,711 / 40,937innodb_#ush_log_at_trx_commit = 0 と

だいたい同じ効果?

Page 25: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_doublewrite = 0

Page 26: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

40,921 / 40,937

変わらず

Page 27: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_max_purge_lag=100000

Page 28: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

40,558 / 40,937

変わらず

Page 29: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_max_dirty_pages_pct=99

Page 30: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

41,236 / 40,937

変わらず

Page 31: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

innodb_log_$le_size=32M

Page 32: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

40,724 / 40,937

変わらず

Page 33: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

結果

Page 34: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ISUCONにおける王道設定

innodb_#ush_log_at_trx_commit = 0innodb_#ush_method = nosync

Page 35: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

それはちょっと。。

Page 36: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ISUCONにおける王道設定

innodb_buffer_pool_size = 1GBinnodb_#ush_log_at_trx_commit = 2

innodb_#ush_method = O_DIRECT

Page 37: ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術

ご清聴ありがとうございました