Movable Typeでのデータベースごとの
処理速度と負荷の違いについて
サイオンコミュニケーションズ株式会社
大城 智史
1.Movable Type
Movable TypeはSix Apart社がリリースしているブログ・システムです。
近年ブログは流行しており多くのブログサイトでMovable Typeが使用されています。
Movable Typeではデータベースと連携して動作する仕組みになっています。
データベースにはMySQL、BerkeleyDB、SQLite、PostgreSQLを使用することができます。
私も業務でMovable Typeに関わることがあり、その際に気になったのがデータベースごとのパフォーマンスの違いでした。
ここでは各DBで同じ処理を行ったときの速さと負荷の違いについて検証してみたいと思います。
2.マシン環境
今回、検証を行ったマシン環境は次のとおりとなっています。
| CPU | Pentium4 1.9GHz |
| Memory | 512MB |
| HDD | 10G UltraATA/100 |
使用したソフトウェアのバージョン等は以下のようになっています。
| OS | FreeBSD5.4-RELEASE-p12 |
| Apache | 2.2.0_7 |
| Perl | 5.8.8 |
| Movable Type | 3.2-ja-2 |
| MySQL | 5.1.6_1 |
| SQLite | 3.3.4_1 |
| DB_File | 1.814 |
| DBI | 1.50 |
| DBD::mysql | 3.0002 |
| DBD::Pg | 1.43 |
| DBD::SQLite | 1.11 |
3.再構築
ここでは各データベースと連携させたMovable Typeで、1000件のエントリがある状態で再構築を
行った時の負荷と、再構築にかかった時間を調査しました。
3.1.MySQL
MySQLでは以下のような結果になりました。
再構築に要した時間:90秒
処理中の平均負荷:81(%)

3.2.BerkeleyDB
BerkeleyDBでは以下のような結果になりました。
再構築に要した時間:90秒
処理中の平均負荷:73(%)

3.3.SQLite
SQLiteでは以下のような結果になりました。
再構築に要した時間:94秒
処理中の平均負荷:73(%)

3.4.PostgreSQL
Postgresqlでは以下のような結果になりました。
再構築に要した時間:118秒
処理中の平均負荷:73(%)

3.5.比較
比較すると以下のようになります。

処理中はどのデータベースを用いても高負荷で、PostgreSQL、SQLite、BerkeleyDBは平均で73%、
MySQLはこれらより高く81%となりました。
再構築に要した時間はSQLite、BerkeleyDB、MySQLは90秒程度、
PostgreSQLではこれらより長く、118秒かかりました。
4.インボート
当初はエントリを増やし、再構築にかかる時間をどのように変化するかを調査しようとしたのですが、
さほど結果がかわらないようだったので取りやめ、インポートにかかる時間を調査することにしました。
ここでいうインポートとはバックアップを取っていたMovable Typeのエントリのテキストデータを、ブログに戻す作業のことです。Movable Typeのメインメニューの「読み込み/書き出し」の項目から行うことができます。
エントリがない状態で500件のエントリを読み込ませるのにかかる時間とCPU負荷を調査しました。
4.1.MySQL
MySQLでは以下のような結果になりました。
インポートに要した時間:196秒
処理中の平均負荷:96.5(%)
4.2.BerkeleyDB
BerkeleyDBでは以下のような結果になりました。
インポート要した時間:20秒
処理中の平均負荷:61(%)

4.3.SQLite
SQLiteでは以下のような結果になりました。
インポートに要した時間:561秒
処理中の平均負荷:96.8(%)

4.4.PostgreSQL
PostgreSQLでは以下のような結果になりました。
インポートに要した時間:348秒
処理中の平均負荷:97.4(%)

4.5.比較
比較すると以下のようになります。
インポート中も各DBで高負荷となりました。BerkeleyDBは平均負荷を61%していますが、実際には処理前後の負荷のかかっていない時間も含まれていると考えられ、処理時間が短かった分、この負荷のかかっていない時間の影響が大きかったと考えられます。
インポートにかかる時間は各データベースで大きく異なりました。速い順にBerkeleyDB(20秒)、MySQL(196秒)、PostgreSQL(348秒)、SQLite(561秒)となっています。

5.最後に
今回はブログの再構築とインポートにかかる時間について調査し、データベースごとにその処理速度に違いがあることがわかりました。特にBerkeleyDBのインポートの速さが目立ったのですが、インポートはそれほど頻繁に行う作業ではありませんし、当方では確認していないのですが不具合が発生することがあるとの情報もあるので、BerkeleyDBが良いというわけでもなさそうです。
環境や設定によっては今回の検証とは結果が変わる可能性もあります。今回の検証はFreeBSDのportsから各データベースをインストールし設定等は変更していない状態で行っています。データベースの変更は難しいことでもないので、本格的に運用される場合は各データベースでのパフォーマンスを検証し、各環境や運用に合ったデータベースを選択されるのがよろしいかと思われます。
























