連載
» 2016年02月25日 05時00分 公開

とにかく速いWordPress(3):CentOS 7の標準環境だけですぐできる、WordPress「5.4倍高速化」テクニック 前編 (2/3)

[中村けん牛,プライム・ストラテジー]

MariaDBの設定を調整してデータベースの処理を高速化する

 さらにチューニングを進めていきましょう。

 CentOS 7が標準で採用するMySQL互換のデータベース管理システムである「MariaDB 5.5」は、デフォルトのストレージエンジンとして「InnoDB」を採用しています。今回は、WordPressをInnoDBで運用する場合に効果のある、2つのパラメータを設定します。

 /etc/my.cnf.d/server.cnfを編集して、[mysqld]のセクションを以下のように修正して保存してください。

[mysqld]
innodb_buffer_pool_size = 512M
query_cache_size = 64M
リスト2:/etc/my.cnf.d/server.cnfより抜粋

 MariaDBを再起動して設定を反映させます。

[root@ip ~]# systemctl restart mariadb

 Webブラウザでトップページをリロードします。先ほどと同様に初回は少し時間がかかりますが、二度目以降はページのロード時間が高速になっていることが確認できます。筆者の環境では、64ms前後になりました。同じくabコマンドでのベンチマークでは、Requests per secondが31.82となりました。

 5パーセントほどですが、この設定によってパフォーマンスがさらに改善されました。ここでは、主にクエリキャッシュの設定が寄与しています。

 クエリキャッシュは、一度発行された参照系クエリ(SELECT文)の実行結果をメモリ上にキャッシュしておいて、同じクエリが発行されたら、その結果を再利用することによってデータベースの実行速度を向上させるものです。PHPアクセラレータと同じく、データベースの更新によってクエリの結果が影響を受ける場合には、キャッシュは破棄されます。クエリキャッシュの有効/無効によってクエリの結果が変わることはありません。

 なお、クエリキャッシュはデフォルトでは無効になっています。上記server.cnfのquery_cache_sizeに任意の値を設定することによって有効となります。

 もう1つのパラメータであるinnodb_buffer_pool_sizeは、InnoDBのデータやインデックスなどをキャッシュするためのメモリ領域のサイズです。CentOS 7の MariaDB 5.5では、デフォルトで128MBになっていますが、今回は512MBとしました。MyIsamと異なり、InnoDBはOSのディスクキャッシュを利用しない設計になっていますので、この値は大きければ大きいほどクエリの実行で有利に働きます。

 この2つのパラメータは、今後1年間のWordPressの運用で見込まれるデータベースサイズの最大値を「X」とした場合、query_cache_sizeはXの10%以上innodb_buffer_pool_sizeはXの120%以上となる値に設定するのが目安です。今回は運用時のデータベースサイズの最大値を400MBと想定して、query_cache_sizeを64MBに、innodb_buffer_pool_sizeを512MBに設定しています。

 なお今回の結果が数%増程度であるのは、インストール直後のWordPressのデータベースサイズが160KBほどと、ほとんどデータがない状況だからです。実際の運用では、コンテンツの追加や更新に伴ってデータベースサイズは増え、プラグインで機能を追加していくことで発行クエリ数も増大していきます。そうなると、パフォーマンスの違いが10倍(10%ではありません。1000%です!)以上になるケースも珍しくはありません。運用が進むにつれて「この2つのパラメータがとても重要になる」ことをぜひ念頭に置いておきましょう。

 ちなみに、ストレージエンジンがMyIsamの場合でもクエリキャッシュは大きな効果があります。しかし、その他のパラメータについては、InnoDBとは全く異なる設定が必要です。InnoDBがデフォルトのストレージエンジンである環境にWordPressを新規にインストールすれば、全てのテーブルがInnoDBで作成されますので、今回紹介する手順のままで問題ありません。一方、もし他のWordPress環境から移転などでデータをインポートするような環境の人は注意が必要です。インポートの前後に、実際の各テーブルのストレージエンジンがInnoDBになっているかを確認するようにしてください。

ここまでのチューニング内容 ページのロード時間
(デフォルト環境比)
1秒当たりの同時アクセス数
(Requests per second)
デフォルト環境 176ms 11.24
APCの導入
 チューニング方法をおさらい
70ms(約251%) 29.20
OPcache+APCuを導入
 チューニング方法をおさらい
66ms(約266%) 30.51
MariaDBの設定を調整
 チューニング方法をおさらい
64ms(約275%) 31.82

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。