WordPressでMySQL Proxyを使用してみる

前回の続きです。

WordPress をインストールする(されている)のと同じサーバ上で
MySQL Proxyをインストール後、すでに起動させている前提です。
そこまでの手順は前回を参照。

残りの手順としては、接続先のデータベース情報をMySQL Proxyに変更してあげるだけです。

新規インストールの場合は、データベースのホスト名を127.0.0.1に変更します。
(”この値は 99% 変える必要はないでしょう。”っていう記述はどうかと思いますね。)

wp_install

あとはそのままいつものステップでインストールするだけです。

すでにインストールされている場合は、wp-config.phpを直接編集するので、
ファイルのバックアップをとっておきましょう。

/** WordPress のデータベース名 */
define('DB_NAME', 'putyourdbnamehere');
 
/** MySQL のユーザー名 */
define('DB_USER', 'usernamehere');
 
/** MySQL のパスワード */
define('DB_PASSWORD', 'yourpasswordhere');
 
/** MySQL のホスト名 (ほとんどの場合変更する必要はありません。) */
define('DB_HOST', '127.0.0.1');
 
/** データベーステーブルのキャラクターセット (ほとんどの場合変更する必要はありません。) */
define('DB_CHARSET', 'utf8');
 
/** データベースの照合順序 (ほとんどの場合変更する必要はありません。) */
define('DB_COLLATE', '');

”MySQL のホスト名”が 自分の普段使っているホスト名になっているはずなので、
それを127.0.0.1に変更します。

これで、WordPressのデータベース接続がMySQL Proxy経由に変更になります。

次に、proxy-lua-scriptで、histogram.lua を使用しているので、その使い方について。

まずはターミナルなどから、サーバーにログインして、mysqlにつなぎます。
(残念ながら、さくらから提供されているphpMyadminからは接続できないですね。)
ふつうはこんな感じ。

user% mysql -u$USER -hmysqlXXX.db.sakura.ne.jp -p
password:

MySQL Proxy経由でつなぐ場合は、ホスト名の部分を以下に変更。

user% mysql -u$USER -h127.0.0.1 -p
password:

特になんの変化も見られないと思います。
単純にproxyを経由して、いつものmysqlにつながっているだけです。

histogram.lua を使用すると、各テーブルへの読み書き回数と、
クエリの実行回数、実行時間の統計が取れます。

mysql> SELECT * FROM histogram.TABLES;
+------------------------------+--------+--------+
| TABLE                        | reads  | writes |
+------------------------------+--------+--------+
| .wp_term_taxonomy            |   1733 |    203 | 
| .wp_usermeta                 |    881 |     10 | 
| .wp_users                    |    578 |      0 | 
| .wp_term_relationships       |   1496 |     29 | 
| .wp_posts                    |   3366 |    164 | 
| .wp_postmeta                 |   2489 |    665 | 
| .wp_ak_twitter               |      3 |      2 | 
| .wp_comments                 |    255 |      0 | 
| .wp_terms                    |   1518 |      3 | 
| .wp_options                  | 134026 |    328 | 
+------------------------------+--------+--------+
 
mysql> SELECT * FROM histogram.queries¥G
*************************** 1. row ***************************
         query: SELECT `t` . * , `tt` . * , `tr` . `object_id` FROM `wp_terms` AS `t` INNER JOIN `wp_term_taxonomy` AS `tt` ON `tt` . `term_id` = `t` . `term_id` INNER JOIN `wp_term_relationships` AS `tr` ON `tr` . `term_taxonomy_id` = `tt` . `term_taxonomy_id` WHERE `tt` . `taxonomy` IN ( ? , ? ) AND `tr` . `object_id` IN ( ? , ? , ? , ? , ? ) ORDER BY `t` . `name` ASC 
         count: 59
max_query_time: 33291
avg_query_time: 8021
*************************** 2. row ***************************
         query: SELECT `term_id` , `taxonomy` FROM `wp_term_taxonomy` WHERE `term_taxonomy_id` IN ( ? , ? , ? , ? ) 
         count: 32
max_query_time: 7779
avg_query_time: 4655.4375

上記は例なので、実際はもっとどっさり取れます。
query_time の単位は マイクロ秒です。

select 文はluaスクリプトで解析するための疑似的なクエリですので、
これにwhere 句をつけたり、order byしたりっていうのは出来ないです。
自分で改造して、やりましょう。

以上で、WordPressが裏でどんなクエリを、
どのくらいの頻度で発行してるかがわかります。

とても簡単なので、興味がある人は是非お試し下さい。

カテゴリー: MySQL   タグ: , , ,   この投稿のパーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">