WordPressの高速化|MySQLへUNIXソケットで接続して爆速に

WordPressの高速化

WordPressは、投稿ページやブログの内容など、多くの情報をデータベース(DB)に格納し、データベースへのI/O(Input / Output)により情報の出し入れを実現している。

データベースには、MySQLを使用することが多い。

 

WordPressはPHPにより動作しており、ユーザからページへのアクセスがある度に、PHPがスクリプト処理を実行し、データベースにデータを取りに行って…という処理を繰り返し行っている。

このデータベースのI/Oがボトルネックとなり、WordPressの処理が遅くなることが多い。
ボトルネックポイントであるにも関わらず、デフォルトのWordPress設定では、このデータベースI/O関連の設定は遅い(オーバーヘッドが大きい)設定になっている。

このMySQLデータベースへのI/Oを簡単に高速化する方法について紹介する。

 

 

WordPress と MySQL との接続概要

WordPress と MySQL との接続には、デフォルトの設定では、下図の「赤い線」で示したルートで接続されている。

所謂、TCP/IPで接続されているというやつだ。

WordPressの高速化
WordPress と MySQL の接続構成図

 

WordPress の wp-config.php の MySQL 関連の設定は、下記のようになっていると思う。

 

wp-config.php抜粋

define( 'DB_HOST', 'localhost' );

 

これだと、localhost (127.0.0.1) というIPアドレスに対して、TCP/IP で接続するという設定だ。
(これは、WordPress と MySQL が異なるサーバに配置された時に、localhost ではなく、別サーバのIPアドレスを指定することで、データベース接続を実現するために、このような設定になっていると想定される)

 

同じサーバ内の接続なのに、わざわざ TCP パケットとするためにデータを包んで、3-way handshake で TCP セッションを確立してと、たいへん遅い(オーバーヘッドが大きい)。

 

そこで、下記のように設定してあげる。

高速化設定:wp-config.php

define( 'DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock' );

このように、‘localhost:/var/run/mysqld/mysqld.sock’ を指定することで、上図の青いルートで WordPress と MySQL を接続させることが可能となる。

所謂、UNIXソケットで接続するというものだ。

(なお、/var/run/mysqld/mysqld.sock の場所は、自分の環境に合わせて変更すると良い。)

 

このようにすることで、TCP接続のオーバーヘッドを回避できるため、MySQLとのI/Oが高速化される。

海外のとある文献によると、20% ほど接続時間が短縮化されたとある。

 

 

体感効果

この WordPress と MySQL の UNIX domain socket による接続は、かなり体感効果が高い。

Google の PAGESPEED INSIGHT の結果、「最初のサーバ応答時間を速くしてください」というサーバ内の処理時間が遅いという項目の結果が、下記のように改善した。

before(TCP/IP): 1.6s
after(UNIX domain socket): 1.3s

だいたい 20% くらい速くなっている

 

また、素晴らしいのが、WordPressの管理画面がサクサク動くことだ。
WordPressの管理画面は、かなりモッサリしたイメージの方が多いと思うが、データベースのI/Oを改善すると、これだけ快適にサクサク動くのかと感動した。

 

設定自体は、たった1行変更するだけで簡単なので、試してみる価値はあるかもしれない。

コメント