データベースを最適化して MovableType の再構築プロセスを高速化できるかも?

Posted by
ぴろり
Posted at
2007/04/06 19:22
Trackbacks
関連記事 (1)
Post Comment
コメントできます
Category
MovableType カテゴリ

 PostgreSQL や SQLite では VACUUM 文、MySQL では OPTIMIZE TABLE 構文を用いてデータベースのテーブルを最適化することができます。特にデータストレージにデータベースを使用しているブログシステムでは、スパムコメントやスパムトラックバックを削除したり一つのエントリを何度も編集したりと、どうしてもデータベースが断片化し易い環境にあります。
 このデータベースの断片化が進むと目的のデータに高速にアクセスできなくなり、特に MovableType では再構築時のパフォーマンスに影響が出ると考えられます。そこでデータベースの最適化によって MovableType の再構築プロセスがどの程度高速化できるのか試してみました。

このエントリーをはてなブックマークに追加  

結果発表

 いきなりですが、実は私の環境(MySQL)ではほとんど効果が確認できませんでした(´・ω・`)  CAPTCHA や JavaScript を利用したスパム対策の効果もあってか、今までスパムコメントやスパムトラックバックの被害は数える程度で、今回問題としているデータベースの断片化が進んでいなかったのかもしれません。つまり、そもそも最適化する必要が無かった、と。
 コメントやトラックバックを頻繁に削除するようなサイトでは効果が期待できるかもしれませんが、それでも個人ブログの規模でエントリが数百件程度、コメントやトラックバックも数千件程度では、そもそもデータベースの断片化がパフォーマンスに影響を与えるレベルではないかもしれません。もし目に見えて効果があった時には是非ブログで記事にして頂くか、コメント欄まで一言頂けると幸いです。

実験方法

 MTStopWatch プラグインを使って(実はこの記事への前振りでした)全てのエントリアーカイブ、全てのカテゴリアーカイブ、マスタアーカイブインデックスの夫々の再構築に要する時間を計測してみました。再構築に要した時間は MTStopWatch プラグインによって、構築されたページ中に記録されます。

  1. 再構築を行なう
    1. 全てのエントリアーカイブ
    2. 全てのカテゴリアーカイブ
    3. マスタアーカイブインデックス
  2. 再構築に要した時間を集計する
  3. 上記を 3 回繰り返す
  4. VACUUMまたはOPTMIZE TABLEでデータベースを最適化する
  5. 再構築を行なう
    1. 全てのエントリアーカイブ
    2. 全てのカテゴリアーカイブ
    3. マスタアーカイブインデックス
  6. 再構築に要した時間を集計する
  7. 上記を 3 回繰り返す

 当サイトが収容されているさくらインターネットでは MySQL を使用しているので、データベースの最適化は以下の SQL 文を使用しました。

OPTIMIZE TABLE `mt_author`;
OPTIMIZE TABLE `mt_blog`;
OPTIMIZE TABLE `mt_category`;
OPTIMIZE TABLE `mt_comment`;
OPTIMIZE TABLE `mt_config`;
OPTIMIZE TABLE `mt_entry`;
OPTIMIZE TABLE `mt_fileinfo`;
OPTIMIZE TABLE `mt_ipbanlist`;
OPTIMIZE TABLE `mt_log`;
OPTIMIZE TABLE `mt_notification`;
OPTIMIZE TABLE `mt_objecttag`;
OPTIMIZE TABLE `mt_permission`;
OPTIMIZE TABLE `mt_placement`;
OPTIMIZE TABLE `mt_plugindata`;
OPTIMIZE TABLE `mt_session`;
OPTIMIZE TABLE `mt_tag`;
OPTIMIZE TABLE `mt_tbping`;
OPTIMIZE TABLE `mt_template`;
OPTIMIZE TABLE `mt_templatemap`;
OPTIMIZE TABLE `mt_trackback`;

 また、生成されたHTMLから MTStopWatch プラグインによって計測された計測結果を集計するためのPerl スクリプトを作成しましたので参考に。

計測結果

表1. 1 ページあたりの再構築時間
計測 エントリアーカイブ カテゴリアーカイブ マスタアーカイブ
LA最小平均中央最大 LA最小平均中央最大 LA-
1 0.1042.7125.8107.3497.2 0.36140.2224.1189.1459.4 0.432527.7
2 0.4844.9135.5113.0467.4 0.52132.7176.7185.9217.5 0.452548.7
3 0.1642.5118.0103.7402.2 0.81146.1184.1172.2253.1 0.371575.2
データベースを最適化
4 0.2043.2120.0101.2375.7 0.35122.0172.5167.4230.6 0.331705.4
5 0.2240.1119.0107.2367.1 0.05136.8185.7182.8254.9 0.101778.4
6 0.1642.0114.599.7349.2 0.03136.8213.0178.0440.5 0.072046.6
記事数= 264 件、カテゴリ数= 11 件、単位=ミリ秒
LA:再構築前に uptime を実行して得られた直近 1 分の Load Average 値

参考リンク

このエントリーをはてなブックマークに追加  


この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:定期的にデータベースを最適化するMovableTypeプラグイン:AutoOptimizeDB

関連記事/トラックバック (全 1 件中、最新 5 件まで表示しています)

Open MagicVox.net のスクリーンショット
タイトル
定期的にデータベースを最適化するMovableTypeプラグイン
Trackbacked at
2009/12/20 16:37
from
Open MagicVox.net
概要
 MovableType が使用している MySQL データベースを定期的に OPTIMIZE TABLE してくれるプラグインを書いてみました。MT5...

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。