Pocket

2サイト目:WordPress MySQLのストレージエンジン変更(InnoDB→MyISAM)

  • add this entry to hatena bookmark

以前に同じタイトルである「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負荷が掛かっている事も確認できていました。

今回の対策

今回も同じように、以下の手順を実施しました。

  1. my.cnf で MyISAM をストレージエンジンとして指定
  2. MySQLを再起動(ついでにapacheも再起動)
  3. 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」などの値も変更しましたので、多少はその影響もあると思います。

Pocket

コメントを残す

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


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。