December 2017  |  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 29 30 31

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が速くなった分)と考えられる。
 

PostgreSQLシングルユーザモード

JUGEMテーマ:コンピュータ

今年の書初めはBashシェルになってしまった。
昨年末に簡単なベンチマークをRaspberry pi で行った。対象としたDBMSはMySQLとSQLiteで、MySQLでの実装をSQLiteにするとどのくらい早くなるかを見るのが目的だった。
意外とMySQLの成績が良いので、PostgreSQLではどうかと試してみたところ、芳しくなくて、では、シングルユーザモードにしたらどうだろうと思い仕込んでみたら、結果は一層悪くなってしまった。

その副産物がPostgreSQLのシングルユーザモード実行シェル。バックエンドサーバを止めて使用する。ベンチマーク用なので、かなり超手抜きなのはご愛嬌。結局、ほとんど意味をなざず残念なので、書初めと称することにした。

 
» read more

pg_bulkload インストールメモ(CentOS 6)

JUGEMテーマ:コンピュータ

とりあえず、簡単にインストールできるのでメモしておく。
 
# yum localinstall http://pgfoundry.org/frs/download.php/3654/pg_bulkload-3.1.6-1.pg93.rhel6.x86_64.rpm

# alternatives  --install /usr/bin/pg_bulkload pg_bulkload /usr/pgsql-9.3/bin/pg_bulkload 930

なお、本体のpostgresqlのほうは、PGDGリポジトリからpostgresql-9.3をインストールしてある。
 

CentOS 5.x のpostgresql を再びpgdg84レポジトリに戻す

JUGEMテーマ:コンピュータ


CentOS5のマシンにログインして、sudo yum update を実行するといっぱい更新があった。アップデートしてみると CentOS 5.7 になってた。

$ cat /etc/issue
CentOS release 5.7 (Final)
Kernel ¥r on an ¥m


まあ、それはさておき、つい先日のこと。
あるサイトにpgdg84レポジトリからインストールしていたpostgresql-8.4.x を何気なく更新してみたら、最新の8.4.9に更新された。それではと思い、自分のサーバでCentOSのbaseレポジトリからインストールしたpostgresql84パッケージシリーズ( http://a98.jugem.jp/?eid=402 )を削除して、pgdg84レポジトリに戻してみたところ、8.4.7から8.4.4へダウンデートとなってしまった。最新版にアップデートされたサーバの /etc/yum.repos.d/pgdg-84-centos.repo と比較してみたが違いは見当たらない。
結局、レポジトリのRPMが更新されていることがわかったので、それをインストールしなおしてみたところ、無事最新版への更新ができた。


$ sudo yum erase postgresql84 postgresql84-server postgresql84-contrib
$ sudo rpm -Uvh http://www.pgrpms.org/8.4/redhat/rhel-5-x86_64/pgdg-centos-8.4-3.noarch.rpm
$ sudo yum --disablerepo=base --enablerepo=pgdg84 install postgresql postgresql-contrib postgresql-server

用意されているパッケージは、次のサイトでリストを見ることができる。



右上あたりにパッケージの頭文字へのリンクがある。それを見るといろいろ揃っているので試してみると面白い。

$ sudo yum install plproxy pgbouncer postgis pgadmin3 phpPgAdmin pg_top
...

pgdg84のpostgresql-8.4.x を CentOS5.x postgresql84に更新

JUGEMテーマ:コンピュータ
 
CentOS5.5もいつのまにか5.6となり、postgresql-8.4のパッケージが標準レポジットリからはいるようになった。そのおかげで、pgdg84レポジットリのpostgresqlのバージョンは 8.4.4 ままになってしまっていた。
というわけで、最新にしようとあれこれといじってみたのだが、結局、pgdg84 のpostgresqlパッケージを消して、標準のpostgresql84パッケージをインストールというのが手順のよう。

# yum erase postgresql postgresql-lib
pgdg84レポジットリをrpmでインストールしてあったので、これも消して、
(いや、pgadmin3とか使いたければそのままかな。あるいは、消してもrpmsaveで残るからそれをmvして使ってもよし)

# rpm -e pgdg-centos-8.4
(# cp /etc/yum.repos.d/pgdg-84-centos.repo.rpmsave /etc/yum.repos.d/pgdg-84-centos.repo)
postgresql84 をインストール、

#yum install postgresql84 postgresql8-lib postgresql84-server postgresql84-contrib
あと、必要に応じてパッケージをインストールして終了。

(pgdg84のパッケージ導入の経緯についてはこちら: http://a98.jugem.jp/?eid=372 )


<<back|<123456>|next>>
pagetop