以前に同じタイトルである「WordPress MySQLのストレージエンジン変更(InnoDB→MyISAM)」で、MySQLのストレージエンジンを変更しましたが、今回は別のサイトで同じ変更をしましたので記録しておきます。
今回も同じように、「レスポンスが重いWordPressサイトを軽くする」為の、MySQLストレージエンジン変更作業となります。
前回の結果のご報告
前回行った、MySQLのストレージエンジンの変更作業の結果はとても良好です。
WordPressの普通のページの読み込みでも、体感で結構な秒数がかかっている感じだったのが、それ以降はある程度快適な感じになりました。
キャッシュ系のプラグインを使っているので、キャッシュをクリアした後の状況からお伝えすると、感覚としては10秒ぐらい掛かっていたのが、2秒ぐらいになった感じです。
今回のサイト
今回ももちろんWordPressを使っており、MySQL は 5.6.1 Community Server を使っています。ストレージエンジンはデフォルトのInnoDBです。
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3619 Server version: 5.6.10 MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec) mysql>
このサイトでは、以前と同じように(キャッシュ系プラグインでキャッシュされていない場合は)かなり遅いレスポンスとなっていました。また10秒ぐらい掛かっているような感じです。
なお、サーバはLinuxを使っているのでtopコマンドなどで状況を見ているとCPU負荷が掛かっている事も確認できていました。
今回の対策
今回も同じように、以下の手順を実施しました。
- my.cnf で MyISAM をストレージエンジンとして指定
- MySQLを再起動(ついでにapacheも再起動)
- alter table コマンドでテーブルのengine設定をMyISAMに変更
まず、my.cnf で追加した値は以下の「default-storage-engine=MyISAM」です。
[mysqld] default-storage-engine=MyISAM
今回は、別のDBもあるので「skip-innodb」は入れていません。
MySQLを再起動後に再度「show engines;」を確認してみます。
mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | MyISAM | DEFAULT | MyISAM storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec) mysql>
ちゃんと「DEFAULT」が「MyISAM」になっています。
次に、WordPressのテーブルに対して、Engineを設定変更します。
WordPressのデータベースに接続した状態で、以下のコマンドを発行すると、各テーブルのEngine列が「InnoDB」になっている事が確認できます。
mysql> show table status;
テーブル毎に、以下のようにMyISAMエンジンに変更するコマンドを発行します。
alter table (テーブル名) engine=MyISAM;
私の今回の環境では、計16個のテーブルがありましたが、全て「InnoDB」から「MyISAM」に変更しました。
取り急ぎの結果
ストレージエンジンの設定を変更したWordPressサイトで、投稿やページを軽く更新してみましたが、かなりレスポンスが軽くなりました。
Linuxのtopコマンドで状況を見ていても、負荷は対して掛かっていないようですので、「レスポンスが重いWordPressサイトを軽くする」目的は達成した感じがします。
とは言え、MySQLやapacheを再起動したばかりでもあるので、数日間は様子を見てみます。
備考
ちなみに、ついでに my.cnf で「key_buffer_size」などの値も変更しましたので、多少はその影響もあると思います。