karszawa / sign-of-horns

ISUCON 7 Qual Repository :metal:
0 stars 1 forks source link

mysql設定ファイル チェックリスト #18

Open totetotetotem opened 6 years ago

totetotetotem commented 6 years ago

なにをやるか

my.cnfをいい感じに設定する

なぜやるか

mysqlを高速化するため

どうやるか

高速化のための設定項目(ストレージエンジンがinnodbの場合)

innodb_flush_log_at_trx_commit

ログバッファの書き込み方式を設定する。デフォルトは1 (コミット毎にディスクフラッシュ) これを

innodb_flush_log_at_trx_commit = 2

とするとディスクフラッシュが1秒おきになって、高速になる。(その代わり、OSや電源の障害が起きた場合1秒間分のトランザクションが失われて死ぬ)

innodb_flush_log_at_trx_commit = 0

0にすると、ディスクフラッシュに加えてログバッファ->ログファイルも1秒おきになる。 高速なんだけど、mysqlのクラッシュでトランザクションが失われて死ぬ

これらはDisc I/Oを削減してくれるので、特にインスタンスがHDDの時に効く。(SSDでももちろん効く)

innodb_flush_method

innodbのログファイル/データファイルの読み書き方法の設定。 デフォルトはfsync

ISUCONでの推奨はおそらく

innodb_flush_method=O_DIRECT

このオプションではDIRECT I/Oってのを使用して速いんだとか。 でもほんとはnosyncの方が速いみたい。でも公式ではサポートしてない。 O_DIRECT_NO_FSYNCってのもある。こっちはサポートしてる。多分速い。

innodb_doublewrite

Innodbは障害耐性のため、データの二重書き込みを行ってるんだけど、それを無効にできる。 推奨

innodb_doublewrite=0

innodb_max_purge_lag

推奨

innodb_log_file_size=128M

でもISUCONだとあまり効果薄いかも。(そんなにinnodb_log_fileがいっぱいにならない?)

innodb_buffer_pool_size

DBの内容を載せるメモリのプールサイズの大きさ。データ量が少ない場合は基本的にDBの全てのデータがメモリに載るように設定する。ISUCONでは1Gを設定するケースが多い。しかしデフォルトのpool_sizeは128Mなので、データ量がそれ以下とかだと、1Gに上げてもパフォーマンスは向上しない。

なおinnodbの全てのデータサイズは

SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM(SELECT SUM(data_length+index_length) Total_InnoDB_BytesFROM information_schema.tables WHERE engine='InnoDB') A;

で得られるらしい。

kazeburoさんいわく 王道設定1

innodb_flush_log_at_trx_commit = 0
innodb_flush_method = nosync

でも現在、nosyncは This option is used for internal performance testing and is currently unsupported. Use at your own risk. だそう。

王道設定2

innodb_buffer_pool_size = 1GB 
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

個人的に推したい

innodb_flush_log_at_trx_commit = 0
innodb_doublewrite=0
innodb_flush_method = nosync
innodb_buffer_pool_size = 1GB 

ところで

symbolic-links = 1

を忘れないこと!

参考: https://www.slideshare.net/kazeburo/mysql-casual7isucon http://d.hatena.ne.jp/hiroi10/20151210/1449731029 https://corporate.inter-edu.com/developper/1373 http://dsas.blog.klab.org/archives/50860867.html