Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

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

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 37 Anzeige

Weitere Verwandte Inhalte

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

Anzeige

Weitere von Masahiro Nagano (20)

Aktuellste (20)

Anzeige

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

  1. 1. ISUCON4 予選問題でアプリ ケーションコードを変更せ ず、”my.cnf”に1行だけ足し て、予選通過ラインを突破 するの術 MySQL Casual Talks vol.7 ISUCON芸人 長野雅広 a.k.a kazeburo
  2. 2. ISUCON知らない方?
  3. 3. 何を変更したのか • インデックスの追加 • アプリケーションをPerlに変更 • アプリケーションサーバの変更と起動設定のチューニング • nginx での画像/CSS/JavaScript配信 • nginx <=> アプリケーションサーバ間をTCPからunix domain socket に • my.cnfのチューニング
  4. 4. もし、my.cnf を 変更しなかったら?
  5. 5. Benchmark 04:02:01 type:info message:launch benchmarker 04:02:01 type:warning message:Result not sent to server because API key is not set 04:02:01 type:info message:init environment 04:02:10 type:info message:run benchmark workload: 8 04:03:10 type:info message:finish benchmark workload: 8 04:03:15 type:info message:check banned ips and locked users report 04:03:17 type:report count:banned ips value:619 04:03:17 type:report count:locked users value:4413 04: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
  6. 6. 予選通過 ライン 40,937 / 37,808 ( ゚д゚) 超えちゃった
  7. 7. タイトル変更
  8. 8. ISUCON4 予選問題でアプリ ケーションコードを変更せ ず、”my.cnf ”に1行だけ足 して、さらに高得点を狙う
  9. 9. ISUCON4のアプリケーション • いすこん銀行 • ログイン機能のみ • パスワードリスト攻撃 • ログイン失敗の多いIPアドレスを拒 否、アカウントロックする
  10. 10. ISUCON4のアプリケーション • MySQLからみると • ログインログの書き込みが発生 • 処理データ量は 40MB 程度
  11. 11. MySQL のバージョン $ rpm -qa|grep mysql mysql55-libs-5.5.40-1.3.amzn1.x86_64 mysql-devel-5.5-1.6.amzn1.noarch mysql55-server-5.5.40-1.3.amzn1.x86_64 mysql55-common-5.5.40-1.3.amzn1.x86_64 mysql55-5.5.40-1.3.amzn1.x86_64 mysql55-devel-5.5.40-1.3.amzn1.x86_64 mysql-server-5.5-1.6.amzn1.noarch 5.5.40
  12. 12. my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 max_allowed_packet=300M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
  13. 13. 1行追加するとしたら? やってみた
  14. 14. innodb_buffer_pool_size = 1G
  15. 15. 41,359 / 40,937 デフォルト 128MB なので 増やすメリット大きくない
  16. 16. innodb_#ush_log_at_trx_commit = 2
  17. 17. 45,053 / 40,937 EC2 で Storageは HDD なので IOが遅延できる効果は大きい
  18. 18. innodb_#ush_log_at_trx_commit = 0
  19. 19. 45,792 / 40,937 “2” ですでに十分だった?
  20. 20. innodb_#ush_method=O_DIRECT
  21. 21. 40,726 / 40,937 変わらない。次への伏線です
  22. 22. innodb_#ush_method=nosync
  23. 23. 45,711 / 40,937 innodb_#ush_log_at_trx_commit = 0 と だいたい同じ効果?
  24. 24. innodb_doublewrite = 0
  25. 25. 40,921 / 40,937 変わらず
  26. 26. innodb_max_purge_lag=100000
  27. 27. 40,558 / 40,937 変わらず
  28. 28. innodb_max_dirty_pages_pct=99
  29. 29. 41,236 / 40,937 変わらず
  30. 30. innodb_log_$le_size=32M
  31. 31. 40,724 / 40,937 変わらず
  32. 32. 結果
  33. 33. ISUCONにおける王道設定 innodb_#ush_log_at_trx_commit = 0 innodb_#ush_method = nosync
  34. 34. それはちょっと。。
  35. 35. ISUCONにおける王道設定 innodb_buffer_pool_size = 1GB innodb_#ush_log_at_trx_commit = 2 innodb_#ush_method = O_DIRECT
  36. 36. ご清聴ありがとうございました

×