Azure Web Sites で WordPress を使い倒す DB 編

Azure Web Sites は無償で使えて、WordPress 設置も楽ちん(ちなみに WordPress 設置はどこのレンタルホスティングサービスでも楽ちんだと思います)。だけど、転送サイズ制限が厳しいって話を前回しました。

今回は DB の話。Azure Web Sites で使える MySQL も制限が厳しいです。

その前に、最低限の話として、サイトの地域を「東アジア」にした場合、データベースも「東アジア」にしましょう(昔は選択できなかったようです)。

Azure Web Sites で使える MySQL DB の仕様

Azure Web Sites の説明では、20MB のサードパーティ製 MySQL データベースとしか書いてませんが、正体は ClearDB というサービスです(データベース作るときに規約の承諾がある)。

ClearDB のサイトで仕様がわかります。Azure で動作する MySQL サービスは、4種類のプランがあり、Azure Web Sites で使われているのは、無料の Mercury というプランみたいです。

ClearDB

Mercury プランは、これを書いている時点だと…

  • 容量: 20MB
  • サービスレベル: 開発と試用のみ サービス品質保証制度(SLA) なし
  • 同時接続数: 4
  • スループット: Low(他の有料プランは、High・Moderate+・Moderate)
  • 最大クエリー発行回数: 3600(って書いてあったけど、今見たら記載が見当たらない)

という具合で、20MB とか接続数とか厳しい感じ。ちなみに、Azure Web Sites の最大(?)のうりであるスケールアウトとスケールアップを行っても(有料だよ)、MySQL DB は変化しないので WordPress を使っている限りクラウドの利点を活かせません。

参考になるサイト: Windows AzureでのMySQL = ClearDBを攻略しよう! | Think IT

ClearDB の活用

Azure Web Sites ユーザーは、ClearDB のサイトで MySQL のプランをアップグレードできます。ここで登録すると ClearDB のサイトで、Azure Web Sites の MySQL DB の状態を見たり、DB のバックアップやリストができます! アップグレードしなくても使えるので活用しちゃいましょう。

ClearDB

必要な、DB の名前・ユーザー名・パスワードは、Windows Azure ポータル の Web サイトのページにある「接続文字列を表示します」からわかります。

ClearDB

ダッシュボードはこんな感じ。

DB サイズの削減

さて、20MB 制限ですが、このサイト(現在 100 投稿ぐらい) で、10MB 前後使ってます。毎日 何かしら書いている Blog だと厳しいので無償利用は、あきらめましょう。ClearDB の有償プランは、$9.99/月 で容量 1GB ですね。

DB サイズを節約する方法は、WordPress の一般的な話のため検索すればいろいろ出てくるので、そちらも参考にしてください。

データベースの操作は、Workbench などを利用

Windows Azure ポータルでも、ClearDB のサイトでも、MySQL DB は直接さわれません。不要なテーブルやレコードを削除するなど、直接 データベースを操作するには、別途 MySQL Workbench 5.2 などを使います。

ちなみに、Windows Azure Web Sites では、ひとつの地域でひとつの MySQL DB しか作れません。2個目の WordPress を設置しようとすると、同じ DB に同じテーブル名で作ろうとしてるので、2個目は正常に動きません。

WordPress プラグイン WP ClearnFix

実際に試してみた DB サイズを減らすためのプラグインを紹介しておきます。WP CleanFix というプラグインで、DB サイズを減らせます。WordPress はリビジョン管理や、複数人で編集のための情報や、自動保存などいろいろとデータが増えるので、不要であれば消せるというもの。

WP ClearnFix

実際使うには注意が必要だけど、どんな情報があるかもわかるので便利かな? MySQL の OPTIMIZE コマンドを発行してサイズ削減も可能。

DB アクセス数の削減

WordPress.com を利用していた時は、DB アクセスエラーを見ることはなかったけど、Azure Web Sites にしてから結構よく見ます。実際に使っていくには、できるだけ DB アクセス数を減らすようにしないとダメかなー?

ただ、この話も WordPress ではよくある一般的な話で、さまざまなキャッシュを行うプラグインを利用するのが常識化してる感じです。適当に検索してみてください。

これを書いている時点で動いている関連するプラグインは以下。

効果のほどはわかりませんが(表示スピードは速くなるよ!)、両者ともソースに情報を追加してるので見てみるといいかも。表示するのに、結構なクエリーを発行してるのがわかります。あとページ全体がキャッシュされていても、人気のページの集計プラグインなど JavaScript によって非同期で WordPress にアクセスするものもあるので DB アクセスはいくらか発生していると思う。

ちなみに、Quick Cache は、投稿しても一覧ページを再生成してくれないので、ちょっと微妙かもと今思ってる。

(4/14 追記: Quick Cache から WP Super Cache に変えてみました。でも設定によっては Server Error が多発したので注意。)

db-error.php の設置で DB エラー対策

DB アクセスエラーのページになる場合があると書きましたが、WordPress のデフォルトでは、DB のパスワードが間違っているんじゃない? とか管理者向けのメッセージが記載されたページが表示されてしまいます。

Azure Web Sites の場合、なんかよくわからないけどたまたまアクセスできていないだけなので、経験上リロードすれば、普通にアクセスできます。

wp-content ディレクトリ以下に、db-error.php ファイルを置くと DB エラー時にそのページを表示してくれるので、もしエラーが発生してしまった場合に適切な内容にしておくといいかも。

ちなみに、このサイトでは勝手に JavaScript でリロードするようにしてます(!) ユーザーが、あれ? って思った瞬間リロードして正しく表示されるはず。禁じ手っぽいけど今のところ超有効。

参考: WordPressの「エラー: データベースに接続できません」画面をdb-error.phpでカスタマイズする | memobits

最後に。MSDN サブスクリプションあれば無償

という感じで DB まわりの話はおわりです。DB エラーが発生しているのがいやーな感じですが、無償で使うにはいたしかたないのか……。

ところで、今回 Azure Web Sites をいろいろしてて知ったことのオマケ。MSDN サブスクリプション会員は、一定の範囲までは無償で Azure を利用できるのだけど、その無償範囲は、Azure Web Sites のコンピューティングなども含まれる。だから、無償範囲内だったら、Web Sites を共有・占有にしても無償!