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

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が起動すれば設定完了です。

その他参考

カテゴリー: サーバ・インフラのこと   タグ:   この投稿のパーマリンク

トラックバック

MySQLの「innodb_buffer_pool_size」と「innodb_log_file_size」の設定 への3件のコメント

  1. ピンバック: zabbixでMysql(innodb)のibdata1が膨らむ理由 | SeedsLight

  2. ピンバック: 【アクセスアップ】月間1万PVを超えたので、年末だしこの1年間でやってきたこととかまとめてみる | undefined .

  3. ピンバック: ラピッドサーバー Mysql Innodb バッファ変更備忘 | マシュタ・どっとこむ

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>