ちょっとシリーズっぽくなってますが、前回は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 も試してみよう。そっちは乞うご期待ってことで。