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割を超えてくると注意する必要があるかもしれない。
]]>MobableType 4.2ではテンプレートごとにスタティック、ダイナミックが選べるようになっていて、テンプレートの編集ページの下にある「テンプレートの設定」項目から公開方法が選択できる。
「スタティック」ではとくにブログ記事の再構築に時間がかかるのでアクセスの少ないブログは記事を動的に生成するように設定してみた。
しかし、残念ながら非力なマシンでは実用的な選択にはならなかった。
自宅サーバの環境(Celeron 2.0GHz, SQLite3)ではページの表示に10秒もかかってしまう。
2,3件同時にアクセスがあれば他のサービスにも支障が出るし、表示待ち10秒は結構なストレスになる。
WordPressではページを動的に生成しているけれど実用的な生成速度が出ている。
処理中の様子をtopで観察してみるとCPUリソースのほとんどをユーザ時間に割いている。
どの辺りの処理に時間がかかっているんだろう。
プロファイラにかけてみたい。
]]>