MySQLの「innodb_buffer_pool_size」と「innodb_log_file_size」の設定

2010年7月27日

innodb_log_file_sizeの設定を変更しようとして、MySQLが起動しないエラーに遭遇してしまって、あれ?となったんですが、原因がそういうえばそうだった。というとこだったりしたので、書いておきます。

「innodb_buffer_pool_size」とセットな感じの「innodb_log_file_size」の設定

まず、MySQLのinnodb_buffer_pool_sizeは、ディスクイメージをメモリ上にバッファさせる値をきめる設定値で、この設定が、いかにディスクIOを押さえるかに繋がったりするので、コストパフォーマンス向上を考えるうえで重要な設定のひとつだったりします。

そして、この設定を変更するときに合わせて調整したいのが、innodb_log_file_sizeです。

innodb_log_file_size
大きくした方がパフォーマンスが向上します。
なぜなら、innodb_log_fileがいっぱいになると、メモリ上のinnodb_buffer_poolの中の更新された部分のデータを、ディスク上のInnoDBのデータファイルに書き出すしくみになっているからです。
ですので、innodb_buffer_pool_sizeを大きくしたら、innodb_log_file_sizeもあわせて調整しないとパフォーマンスが向上しません。

DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!

「innodb_buffer_pool_size」「innodb_log_file_size」の変更設定

innodb_log_file_sizeの設定を変更するときに注意しなければいけないのが、既にトランザクションログファイルが存在していて、innodb_log_file_sizeの設定の値の方が大きい場合、エラーとなってしまうというとこがあります。

これを踏まえて、設定作業を行うには、以下のように行います.

値を設定します。

# vi /etc/my.cnf
innodb_buffer_pool_size = 512M
innodb_log_file_size=128M

設定の値についても以下のページが参考になります。

innodb_buffer_pool_size
グローバルバッファなので、どかんと割り当ててください。
MySQL ABのドキュメントには、搭載メモリの80%とも書かれています。

innodb_log_file_sizeの値は、1MB以上で、32bitマシンの場合は4GB以下にしなければならないとMySQL ABのドキュメントには書いてあります。
また、もうひとつ上限があります。innodb_log_fileはinnodb_log_files_in_groupの数(デフォルトは2)だけつくられるのですが、innodb_log_file_size×innodb_log_files_in_groupが innodb_buffer_pool_sizeを越えてもいけません。

DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!

MySQLを停止します。
ここで、より厳密さを求めるならシャットダウンの前に

mysql> SET GLOBAL innodb_fast_shutdown=0;

を実行します。

# /etc/init.d/mysqld stop

トランザクションログファイルを削除します。(場合によっては移動で)
デフォルトでは、2つのログファイルを使用するようになっています。

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1

MySQLを起動します。

# /etc/init.d/mysqld start

新たにログファイルが生成され、MySQLが起動すれば設定完了です。

その他参考

タグ: ,

トラックバック URL

コメントをどうぞ