PostgreSQL や SQLite では VACUUM 文,
MySQL では OPTIMIZE TABLE 構文を用いて
データベースのテーブルを最適化することができます。
特にデータストレージにデータベースを使用しているブログシステムでは,
スパムコメントやスパムトラックバックを削除したり一つのエントリを何度も編集したりと,
どうしてもデータベースが断片化し易い環境にあります。
このデータベースの断片化が進むと目的のデータに高速にアクセスできなくなり,
特に MovableType では再構築時のパフォーマンスに影響が出ると考えられます。
そこでデータベースの最適化によって MovableType の再構築プロセスが
どの程度高速化できるのか試してみました。
いきなりですが,実は私の環境(MySQL)ではほとんど効果が確認できませんでした(´・ω・`)
CAPTCHA や JavaScript を利用したスパム対策の効果もあってか,
今までスパムコメントやスパムトラックバックの被害は数える程度で,
今回問題としているデータベースの断片化が進んでいなかったのかもしれません。
つまり,そもそも最適化する必要が無かった,と。
コメントやトラックバックを頻繁に削除するようなサイトでは効果が期待できるかもしれませんが,
それでも個人ブログの規模でエントリが数百件程度,コメントやトラックバックも数千件程度では,
そもそもデータベースの断片化がパフォーマンスに影響を与えるレベルではないかもしれません。
もし目に見えて効果があった時には是非ブログで記事にして頂くか,コメント欄まで一言頂けると幸いです。
MTStopWatch プラグインを使って(実はこの記事への前振りでした) 全てのエントリアーカイブ,全てのカテゴリアーカイブ,マスタアーカイブインデックスの 夫々の再構築に要する時間を計測してみました。 再構築に要した時間は MTStopWatch プラグインによって,構築されたページ中に記録されます。
VACUUMまたはOPTMIZE TABLEでデータベースを最適化する当サイトが収容されているさくらインターネットでは MySQL を使用しているので, データベースの最適化は以下の SQL 文を使用しました。
また,生成されたHTMLから MTStopWatch プラグインによって計測された計測結果を集計するための Perl スクリプトを作成しましたので参考に。
| 計測 | エントリアーカイブ | カテゴリアーカイブ | マスタアーカイブ | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LA | 最小 | 平均 | 中央 | 最大 | LA | 最小 | 平均 | 中央 | 最大 | LA | - | |
| 1 | 0.10 | 42.7 | 125.8 | 107.3 | 497.2 | 0.36 | 140.2 | 224.1 | 189.1 | 459.4 | 0.43 | 2527.7 |
| 2 | 0.48 | 44.9 | 135.5 | 113.0 | 467.4 | 0.52 | 132.7 | 176.7 | 185.9 | 217.5 | 0.45 | 2548.7 |
| 3 | 0.16 | 42.5 | 118.0 | 103.7 | 402.2 | 0.81 | 146.1 | 184.1 | 172.2 | 253.1 | 0.37 | 1575.2 |
| データベースを最適化 | ||||||||||||
| 4 | 0.20 | 43.2 | 120.0 | 101.2 | 375.7 | 0.35 | 122.0 | 172.5 | 167.4 | 230.6 | 0.33 | 1705.4 |
| 5 | 0.22 | 40.1 | 119.0 | 107.2 | 367.1 | 0.05 | 136.8 | 185.7 | 182.8 | 254.9 | 0.10 | 1778.4 |
| 6 | 0.16 | 42.0 | 114.5 | 99.7 | 349.2 | 0.03 | 136.8 | 213.0 | 178.0 | 440.5 | 0.07 | 2046.6 |