増子良太のブログです

増子良太が書いているブログです。テーマをしぼらず、思いついたものをただひたすら書いていきます。

mysqlの設定は奥が深い

      2016/01/28

最近mysqlの設定を変えてはMTの再構築を繰り返しているrmascoです

mysqlのロゴです

mysqlの設定は基本的にmy.cnfで行います。

my.cnfの中には様々な設定値がかけて、それぞれが色々な意味を持っています。

ここで全てを紹介できないので、innoDBを使っている場合に重要な項目だけ記録として書いておきます。

 

innodb_file_format

データ圧縮機能を使う際のフォーマットを指定するらしい。innoDBはMyIsamよりファイルサイズが大きくなるらしい。
そこでこうした設定を有効にすることで、圧縮して小さくする。

ということですが、フォーマットの違いで何が起こるのかはよくわかりません。
次に登場するinnodb_file_per_tableと一緒に使うらしいです

innodb_file_per_table

innodb_file_per_tableはデータファイルをテーブル毎に分けるかどうかの設定らしい。

通常は「ibdata1」というファイルがデータが増えるとどんどん大きくなっていくけど、
この設定を有効にすることで、テーブル毎にデータファイルを作成するから、
データが大きくなってもテーブルを消せば、領域を確保できたりするらしいです。

ただ、どちらにしてもibdata1というファイルは大きいけれども。

innodb_additional_mem_pool_size

innodb_additional_mem_pool_sizeはテーブルの情報なんかをキャッシュしておくサイズを指定するみたいです。

色んなサイトにエラーが出たら少し大きくしてやれば良いみたいなことが書いてある。
適当でよいと。

innodb_buffer_pool_size

innodb_buffer_pool_sizeはinnoDBでパフォーマンスを上げたいときには重要な項目の一つだそうです。
データやインデックスなどをキャッシュしておくサイズで、このサイズ内であればディスクの書き込みが発生しないので、
高速ってわけですね。

実メモリの80%くらいの大きさに指定すると良いらしです。

innodb_log_file_size

innodb_log_file_sizeはコミットされたものを一時的にメモリに貯めておくことでデータベースへ高速に書き込みをするためのサイズみたい。

32bitの環境の場合は4Gまでの制約があるのと、innodb_log_file_size × innodb_log_files_in_groupがinnodb_buffer_pool_size以下になるようにしないといけないらしい。

innodb_log_buffer_size

innodb_log_buffer_sizeはデータ更新時のログをメモリ上においておくためのサイズを指定するらしい。

でも8M以上にしても意味がないとのこと

MT5.27でPSGI、mysql5.5でinnoDBを使うと、fastCGIでMyIsamと比べるとだいぶ早くなる。
もちろんfastCGIの環境でもちゃんと設定をしたりすることで早くなるんでしょうが、
PSGIのほうはあまり設定とかしなくても早い(設定するともっと早い)

ただ、mysqlの設定、bufferだのlogだのメモリに関する設定が多くて、イマイチ理解しきれておりませんが。。。
ちゃんとメモリを使い果たすような設定にすれば、最高のパフォーマンスが得られるよってことか。

もちろんアプリ側でもパフォーマンス・チューニングはすべきですが!

 - MySQL, データベース