MySQLのInnoDBに基本のチューニングを施してWordPressは速くなるか

ちょっとシリーズっぽくなってますが、前回はMySQLのストレージエンジンをInnoDBに変更してWordPressが速くなるかみてみました。
MySQLのエンジンをInnoDBに変更してWordPressは速くなるか | 曖昧/旬.
まとめると、MyISAMデフォルトよりは速いけど、チューニングしたMyISAMよりは遅いって感じでした。

というわけで、今回はInnoDBに基本のチューニングを施してみました。

入れる設定は何かというと、MySQLに付いてくる512MBメモリ用設定 my-large.cnf で innodb_ から始まる設定のコメントアウトを外すだけ。簡単ね。

でも、そこで問題が。設定を有効化するためにMySQLを再起動すると、WordPressはなぜかインストール画面に。DBの内容を認識していないっぽい。MySQLは動いている。SHOW TABLE STATUS の出力を見ると、Engine の欄が全て NULL に。どうやらInnoDBなテーブルが認識されていない。ログファイルにはこんな内容が出てました。

InnoDB: Error: log file /var/lib/mysql/ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 67108864 bytes!
150522 11:34:39 [ERROR] Plugin 'InnoDB' init function returned error.
150522 11:34:39 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

どうやら innodb_log_file_size を変更した影響らしい。

innodb_log_file_size を変更すると、InnoDBのログファイルである ib_logfile0 と ib_logfile1 のサイズが変更されます。このサイズはファイル作成時に決まっちゃうようで、運用中に変更するとサイズが合わなくてInnoDBエンジンが起動できなくなります。MySQL本体は起動できてしまうので、もしかしたら気づきにくいかも。

で、こいつら何かと言うと、InnoDBのWALです。

InnoDBのログファイルは、別名WAL – Write Ahead Logと呼ばれるもので、名前を日本語に直すと「前もって書き込んでおくためのログ」とでも呼べるだろうか。
情報源: 漢(オトコ)のコンピュータ道: InnoDBのログとテーブルスペースの関係.

詳しい説明は情報源のページを見たらいいけど、とりあえず、運用者が勝手に消したらDBの整合性が取れなくなるものですね。なのでサイズ変更するには手順が必要です。それもそのページに書いてあるんですけど、簡単に言うと、終了前にこれを打っておくといいらしい。

SET GLOBAL innodb_fast_shutdown=0

これを打っといて終了、ファイルを削除、設定を変更して起動。それで完了。

さて、本題の結果はどうなったかと言うと、芳しくありませんでした。

エンジン、設定 表示速度(s)
MyISAM デフォルト 0.526
MyISAM my-large.cnf 0.408
MyISAM my-huge.cnf 0.410
InnoDB デフォルト 0.486
InnoDB my-large.cnf 0.507

なんでだろう?

とっても謎だったのでもう少し深く。アクセス数も少ないので個別の速さを見てみると、最速は1~2msという高速処理をしているものもあれば、1s以上かかっちゃっているものもある。チューニング前のやつでは安定した値。チューニングして不安定になっちゃった模様。やっぱDBチューニングは難しいってことなのかな?

でも、せっかくだから my-huge.cnf も試してみよう。そっちは乞うご期待ってことで。