MovableTypeではページの生成に非常に時間がかかる。
mod_perlやFastCGIを導入すればバイトコンパイルにかかる時間分を短縮できるが、再構築は分単位で時間がかかる処理のため、バイトコンパイルにかかる時間は無視できる程度になってあまり効果が出ないと思われる。
『MTからデータベースへのクエリの発行回数を減らす (mt-search.cgiを例にとって)。』ではデータベースへの問い合わせ回数を減らすことでページの生成時間を減らそうとしているが、アムダールの法則で、問い合わせにかかる時間が全体のうちに占める割合で効果が限定される。
自分の環境ではどうだろうかと思ってデータベースへの問い合わせにかかる時間を計ってみることにした。
環境は
CPU | Celeron 2.0GHz |
chip set | i865G |
memory | PC2700 768MB |
OS | FreeBSD 7.2 |
DBMS | MySQL 5.0.77_1 |
MovableType | 4.2.61 |
という感じで、ウェブサーバと同じマシンでmysqldを動かしている。
index_page.log
インデックスページのみを再構築したときのクエリログは上のようになった。
全体で449クエリ。そのうちSELECTが437クエリ、UPDATEが4クエリ、SETが8クエリ。
次にこのログを元にインデックスページ再構築時と同じクエリ列(query.txt)を作って
% time mysql -u root -ppasswd databese < query.txt > /dev/null
のようにして問い合わせ時間を計測した。
結果
0.086u 0.053s 0:02.13 6.1% 125+1371k 0+0io 0pf+0w 0.100u 0.046s 0:02.19 6.3% 87+977k 0+0io 0pf+0w 0.106u 0.034s 0:02.22 5.8% 130+1432k 0+0io 0pf+0w 0.115u 0.023s 0:02.20 5.9% 88+1001k 0+0io 0pf+0w 0.067u 0.074s 0:02.23 5.8% 109+1236k 0+0io 0pf+0w
となって5回平均で2.19秒かかっていることになる。
再構築時間が最短で13秒かかっているので、オーバーヘッドを含めずに17%程度がデータベースへの問い合わせにかかっている。
オンデマンドに問い合わせているだろうから、データベースサーバを置くマシンを別にしても大差ないだろう。
問い合わせ時間が0秒になっても10秒以上かかっていて、今のところ影響は少ないけど2割を超えてくると注意する必要があるかもしれない。