February 2015  |  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Raspberry Pi でPostgreSQLは桁違いに遅かった

JUGEMテーマ:コンピュータ

Raspberry Pi Model A で、ちっちゃなリレーション(10カラム未満)のベンチマークをしてみたところ、PostgreSQLが桁違いに遅い結果となってしまった。Debian系のPostgreSQLパッケージはpsqlがperlのラッパーから起動されるためプロセス起動のオーバーヘッドはあるものの、それを大きく上回る遅さであった。

BerkeleyDBは、SQLite互換モードで使ったが、SQLiteより速かった。SQLiteは競合した場合にエラーとなるため、実行プログラム側でWAITとリトライを行う必要があるが、BerkeleyDBはキューを持つためその必要はなかった。

ベンチマークをするテーブルは10カラム未満のもので、1000回(10クエリを100セット)のINSERTの間、別プロセスで定期的に6または8クエリの1セットのSELECTを行うもので、DBMSはBerkeleyDB, MySQL, PostgreSQL そして、SQLite を対象とした。ベンチマーク用のプログラムはBashシェルスクリプトで記述した。

以下は、INSERT100セットを行ったときの結果で、{同時実行セット数、経過時間[sec]、1セットあたりの所要時間[sec]}を、INSERTとSELECTについてそれぞれのDBMSで測った結果である。なお、インデックスは作成していない。
SQLiteについては、INSERT時にはロックファイルを作成して、SELECTクエリ側ではロックファイルがなくなるまでWAITとリトライをするようスクリプトに記述した。
※WAIT時間のチューニングについてはここでは触れない。

1. Raspbery Pi A+ の結果
Raspberry Pi A+(ARM 700MHz)、RAM 256MB、MicroSDでOSはRaspbian(Wheezy)での、Insert/Select同時ベンチマーク実行結果である。
MySQL 5.5:
::::::::::
Result Times and Averages:
        INSERT 100 672.442153079 4.11888
        SELECT 811 673.441800291 0.332067
PostgreSQL 9.1:
:::::::::::::::
Result Times and Averages:
        INSERT 100 2622.1109690768 23.4154
        SELECT 459 2626.588798772 5.23984
SQLite 3.7:
:::::::::::
Result Times and Averages:
        INSERT 100 550.92420354 2.83853
        SELECT 502 551.120738178 0.397833

PostgreSQLでのベンチマーク結果が一桁遅いのが気になる。
※PostgreSQLをシングルユーザモードで実行した場合は、さらに遅くなった。


2. Raspberry Pi A(MicroSD変更)のベンチマーク結果
Raspberry PiはA+でなく Aではあるが、やや速いMicroSDを使ってのInsert/Select同時ベンチマーク実行結果である。
BerkeleyDB 5.1:
:::::::::::::::
Result Times and Averages:
        INSERT 100 495.308163151 2.26031
        SELECT 603 495.585024318 0.301102
SQLite 3.7:
:::::::::::
Result Times and Averages:
        INSERT 100 522.1067024546 2.51971
        SELECT 559 523.1204274229 0.335052

BerkeleyDBのほうがSQLiteよりもやや速い結果となった。


3. Celeron マシンでのベンチマーク結果

以下は、PostgreSQLを含むCeleron847(Dual Processor)、RAM 2GB、SDD でOSはCentOS6のマシンで、Insert/Select同時ベンチマーク実行結果である。

BerkeleyDB 6.1:
:::::::::::::::
Result Times and Averages:
INSERT 100 281.1365123651 0.381156
SELECT 1220 281.1340809510 0.16721

MySQL 5.1:
::::::::::
Result Times and Averages:
INSERT 100 299.1057975644 0.594603
SELECT 1795 299.1000098073 0.119218

PostgreSQL 9.3:
:::::::::::::::
Result Times and Averages:
INSERT 100 297.728115501 0.27439
SELECT 1165 297.754557170 0.188408

SQLite 3.6:
:::::::::::
Result Times and Averages:
INSERT 100 337.476402330 1.29092
SELECT 1931 337.627725860 0.142878
PostgreSQLも他と大きくは変わらない結果で、SQLiteが遅い結果となった。ただし、SQLiteについては、ロック時のWAIT時間が必要以上に長すぎた(CPUが速くなった分)と考えられる。
 
1
pagetop