WordPress の memcached による高速化

Nao さんが PHP カンファレンスの質疑の時に、「wordpress.com では memcached が使われている」ということを言われているのをふと思い出し、ためしにぼくも WordPress に memcached を適応してみようとやってみました。 🙂

といっても memcached が動いているレンタルサーバはないと思いますので、実際に利用できるのは専用サーバ使われている人になるとおもいます。 ぼくはちょっとローカルで試してみただけですので、その辺はご容赦ください。。(笑)

とりあえず、memcached。

memcached – Wikipedia

memcached は、汎用の分散型メモリキャッシュシステムである。

もともと Danga Interactive によって LiveJournal サービスのために開発されたが、現在は多数のサイトで利用されている。memcached は、データとオブジェクトをメモリ内にキャッシュすることでデータベースから読み出しを行う回数を減少させ、データベースを用いた Web サイトを高速化するために良く用いられる。memcached はpermissive free software licence によりライセンスされている。[1]

高スケーラブルが要求される、Web サービスでよくつかわれているメモリキャッシュの実装です。 たしか mixi も使っているとどこかで読んだきもします。

memcached の WordPress の適応範囲は、SQL のクエリキャッシュのような感じで使われ、MySQL への負荷をさげ、同一参照に関してはメモリ内のキャッシュを返すことで動作を速くすることです。

(注意) wordpress.com で実際に行っていることは分かりません。 おそらくは似たこともやっていると思いますが、いろいろ追加チューニングしていると思います。 🙂

ここで使ったのは WordPress コアに付加できるようになっている object-cache.php の一つで、以前をかもとさんが動かされていたファイルキャッシュの memcached 版ということになります。

WordPress サイトのパフォーマンスチューニング (4) : dogmap.jp

さて、前回、オブジェクトキャッシュの効率化に着手して、モノの見事に失敗した私ですが、File-Based Extension to the WordPress Object Cacheなるモノを発見。

DBアクセスせずにファイルアクセスで、済ませてしまおうという仕掛けです。
要はコレ、WordPress 2.5.x 以前にあったオブジェクトキャッシュを、2.5.x 以降のバージョンでも使えるようにしてしまおうというものです。

てなわけで、とりあえずローカルの Ubuntu に memcached をインストール。 これは簡単。 🙂

sudo apt-get install memcached

でもって、PHP に memcached クライアントをインストールします。 ぼくは Ubuntu の XAMPP なので以下のようにしてモジュールをコンパイルします。(xampp-dev とか gcc とか autoconf とかは事前に入れておくのこと)

モジュールは以下にあります。

PECL :: Package :: memcache

memcache-2.2.5.tgz (35.1kB)

現時点 2.2.5 が stable だったのでこれをダウンロードしてどこかに展開。

ダウンロードしたソースフォルダに cd した後、

/opt/lampp/bin/phpize
./configure --enable-memcache --with-php-config=/opt/lampp/bin/php-config
make
sudo make install
sudo vi /opt/lampp/etc/php.ini
 extension="memcache.so" ←行追加
sudo /opt/lampp/lampp restart

これでOKです。 Apache リスタート後、phpinfo で読まれていることを確認します。

memcached

できたら、object-cache.php をダウンロードして wp-content/object-cache.php に配置します。

/memcached/trunk/ – WordPress Plugin Repository

object-cache.php

ちなみに Authoer は、

Author: Ryan Boren

Ryan さんですね。

てなかんじで、これで準備完了です。

ローカルにおいてある .another のトップページを表示してみました。 まずは、一回目。

17 queries. 1.987 seconds.

これでキャッシュしたハズなのでもう一度トップにアクセス。

4 queries. 1.020 seconds.

ぶはは、4クエリ(笑)

ちなみにこのローカルは、PHP の debuger とかプロファイラ等いろいろいれていおり MySQL 以外の部分が元々遅く、ちゃんとチューンしたサーバをつかえば相当速い速度がでそうです。 あと MySQL の負荷が高いときにはさらなる威力を発揮するでしょう。

さて、一応いくつか動作確認はして大丈夫そうでしたが、まぁまぁキャッシュ技術の特性上不具合もでやすいと思いますので、もしも本番運用する方がいましたら老婆心ながら試験は十分に・・・。

プラグインから発行される SQL なんかは object-cache 対応していないものがおおいので、そのへんのチューニングも含めてアクセスの多いサイトでは試してみるのもおもしろいかもしれません。 🙂

WordPress の memcached による高速化」への2件のフィードバック

コメントを残す