hiromasa.zone : o)

2007/4/27 Friday 投稿時の月齢:10.5  月名:十日余の月  潮汐:若潮 Moon:10.5[十日余の月]今日の心技体 : 好調期低調期好調期

WordPress のデータベースチューニング このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴れ ひろまさ @ 23:27

WordPress サイトを高速化したい場合のノウハウ、という話です。 高速化にはいろいろ要素があって話が発散するので、とりあえずデータベースについて。

まず最初に。 特にレンタルサーバで表示速度が遅い場合は、大抵は MySQL の負荷だと思います。 極端な過負荷の場合は、ほぼ手が出ません。 この場合は潔くあきらめましょう。。(笑)

ここからは、ある程度速い MySQL でもうちょっと速くしたい場合の話。 といっても、ちゃんと検証したわけではないのでどの程度効果があるか分かりません。 まぁちょっとしたネタってことで。 システム開発の世界では、この手の高速化のことをパフォーマンスチューニングといいますが、機能を削らず、処理の見直しや環境の変更を行い高速化を行う手法です。

まず最初は MySQL のクエリーキャッシュから。

これは、おおざっぱにいえば、よくある問い合わせを覚えておき、次の要求に対しては実際に検索せずに前の検索結果をそのまま返すという技術です。 もちろん、UPDATE や INSERT があった場合は、この検索結果は破棄するといった処理がはいります。

WordPress のデータベース動作に関しては、ほぼ SELECT だけ。(みんながサイトを見たとき) 更新はブログマスターが記事を書いたり、読者がコメントをしたときなどのごくごく限られた場合です。 ということは、このクエリーキャッシュが思う存分効果を発揮するわけです。

実はぼくも前から気になっていたのですが、 2.0 系ではエントリを表示する際の SQL に「$now」という条件が使われています。 今の時刻を検索条件にして、それより前を表示する。(要は未来日投稿を表示しない) みないな SQL なのですが、こういう SQL だとクエリーキャッシュが対応できません。

おわかりのとおり、「今より前」なので、SQL を発行するたびに条件が変わってしまうからです。

Post Query Accelerator

WordPress’ post queries always ask for posts with post_date_gmt < = '$now' where $now is set to the current time, to prevent posts in the future from showing up. This means that $now changes with each page load. For high volume MySQL sites, the system administrator might turn on MySQL’s qcache, in order to cache some SQL queries. The problem with $now is that it changes each time, so the query is never exactly the same again, and the cache doesn’t help.

ということで、2.0 系に関しては発行する SQL をのっとってキャッシュしやすいように書き換えてくれるプラグインもあるようです。 ただ、共有 MySQL サーバ場合のクエリーキャッシュがどのように分配されるのかぼくは知りません。。 なので効果も分かりません。 MySQL に詳しい方教えてください… 🙂

ちなみに、2.1 系はこのクエリーを使っていません。 wp-cron で真の未来日投稿ができるようになったので、処理から全てはずされました。

では、次はインデックス。

データベースで検索をかける場合、基本的に検索対象は小さければ小さいほど速くなります。 データが多い場合はもちろんどんどん遅くなっていくわけですが、これを改善させようというデータベース技術にインデックスというのがあります。 事前に対象に索引を作っておき高速に検索をしようというものです。

WordPress でも標準でいくつかインデックスはってあるんですが、もーちょっとはれないかな、と思って調べてみたところやっている方がいました。

rabich.de HowTo: WordPress-Plugin “Database Tuning”

ドイツ語なのでよく読めないのですが、 PHP をみるとインデックスはっている部分がみえました。 ためしてないのであれですが、サイトによっては高速化できるかもしれません。(DB 操作はおっかないので、自己責任で…)

というわけで、データベースチューニングの話でした。(ぼくは専門じゃないので参考までに)

人間はなぜ、かくも速さを追求するのか。 人生が倍の時間だったらいまの倍の時間、待てるか、それでもなお追い求めるのか。 遺伝子に聞いてみたいところです。

8 Comments

Trackback

  1. From: サーログ - 2007/4/30 Monday Morning (Trackback)

    WordPress 静的ページごとに表示を変化させるテンプレ…

    WordPressのページIDを取得してページによって表示を変えようと格闘。 過… (more…)

Comment

  1. From: おで(Odyssey) - 2007/4/28 Saturday Nighttime (Comment)

    基本的に重くなってる原因がスパムボットのせいっぽいので、
    コメントとトラバを塞げば、ぐぐっと軽くなる気がするのですが
    イッテハイケナイコトを言ったような気がします(;’∇’)

  2. From: ひろまさ - 2007/4/28 Saturday Nighttime (Comment)

    DB 過負荷はチューニングの世界ではもうどうしょうもないですね。 まずは正常に動いていないとだめです。 :mrgreen:

    ただいま”Database Tuning”でインデックスはってみました。
    > 24 queries. 0.317 seconds.
    1エントリ表示ならコンスタントに 0.3 ~ 0.4 秒台になったー。

    時間帯のせいかもしれませんが、もしかするとここくらいのデータ量でもインデックスはると速くなるかもしれないです。

    # ちなみに、もしやってみる方はよく readme 読んでからやってください。 おかしくなってもこればかりはうまく手助けできません。。

    > If you use the plugin you should know what you are doing. You have to have the necessary database knowledge.

  3. From: yutaka - 2007/4/28 Saturday Nighttime (Comment)

    ううっ、そそられるなぁ。こういうエントリー:mrgreen:
    危険な香りもするけど…..

  4. From: Mie - 2007/4/28 Saturday Daytime (Comment)

    そそられる感覚だけ楽しんでおくことに。。

  5. From: ひろまさ - 2007/4/29 Sunday Nighttime (Comment)

    あはは、みなさまお気をつけを・・・ 😎

  6. From: aka - 2007/4/29 Sunday Nighttime (Comment)

    まずはDBに負荷をかけまくってロリポおじさんを泣かせようと思います。:razz:

  7. From: ひろまさ - 2007/4/29 Sunday Nighttime (Comment)

    ロリポおじさんのくもった顔が夢に出ます。。。(笑


このサイトはコンテンツをフリーズしました。トラックバック・コメントは閉じられています。

新しいサイトは、

hiromasa.another :o)

です。 :-)

このサイトについて

このブログは引っ越しを行いコンテンツはフリーズしています。hiromasa.anotherへどうぞ。

Powerd By WordPress

We (Heart) WordPress

WordPressME Logo
WordPress Plugins

ブログ内検索

Todays Popular

WordPress Ring

はてなリング - WordPress -

情報

35 queries. 0.581 seconds.

このページの先頭へ