Postgres8.4のベンチマークを取ってみた

※2009/7/19追記
こちらの方がおそらく正確でしょう。





先週行う予定だったベンチの結果です。


http://www.techscore.com/tech/sql/pgbench/6.html
http://www.techscore.com/tech/sql/pgbench/7.html
http://www.techscore.com/tech/sql/pgbench/8.html
こちらのベンチ方法を元に各バージョンのベンチマークを比較してみました。
postgresql.confはメモリとかWALとかコネクション関係とか
設定を合わせた方が良いかなーと思いつつ変更していないため、
100%の比較にならないのかもしれません。
でも指標くらいにはなるでしょう。*1

ハード環境(仮想サーバ上のLinux

CPU Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz (これの1コアのみ)
メモリ 1024MB
OS CentOS 5

バージョン毎の共通手順

  • postgresとpgbenchを普通にインストール
  • initdbでDB初期化
  • Postgres起動
  • DB作成(データベース名=test)-createdb
  • テストデータ作成
    • pgbench -i -s 25 test
  • テストが終わったらPostgres停止

テスト方法(こちらのパクリ:http://www.techscore.com/tech/sql/pgbench/6.html

  1. 正確なデータを計測するために、同条件で5回テストを実行しその平均をとります。
  2. テスト結果に用いられる値は、tpsの算出にクライアントとの接続の確立にかかった時間を含めないものを使用しています。
  • ベンチ 1
    • 1クライアントあたりのトランザクション数を100で固定し、クライアント数のみ増加(10→50→100)
  • ベンチ 2
    • クライアント数を1で固定し、1クライアントあたりのトランザクション数を増加(1000→3000→5000)
  • ベンチ 3
    • クライアント数・1クライアントあたりのトランザクション数の双方を増加(10/100→30/300→50/500)
  • ベンチ 4(検索のみ)
    • クライアント数・1クライアントあたりのトランザクション数の双方を増加(10/100→30/300→50/500)

テスト結果

ベンチ1

- 10/100 50/100 100/100
8.4.0 166.5 170.25 172.75
8.3.7 148.75 - 139.75
8.2.13 129 - 149.2
8.1.17 108.4 - 113
8.0.21 116.8 - 113.8
7.4.25 129.4 - 123.8


ベンチ2

- 1/1000 1/3000 1/5000
8.4.0 135.5 191.75 181.25
8.3.7 132.8 - 175
8.2.13 163.2 - 119.2
8.1.17 102.6 - 111
8.0.21 106.8 - 120.8
7.4.25 119.8 - 136.5


ベンチ3

- 10/100 30/300 50/500
8.4.0 148 222.5 218.75
8.3.7 156.6 - 194.6
8.2.13 144.2 - 130
8.1.17 112.25 - 111.4
8.0.21 114.6 - 126.2
7.4.25 114.6 - 133.4


ベンチ4

- 10/100 30/300 50/500
8.4.0 1037 1205.4 3405.2
8.3.7 965.6 - 1867.2
8.2.13 1064 - 1347.5
8.1.17 1053 - 2280.4
8.0.21 1089 - 2645.6
7.4.25 1004.6 - 1642.5


8.4以外、真ん中の値が無いのはただの手抜きですw


バージョンが上がるにつれて、順当にパフォーマンスも良いですね。
ただSELECT(ベンチ4)の結果は結構ばらつきが多く、5回ではなく10回くらいで行った方がよさそうです。
というか、ベンチ4の結果が怪しいのは
パラメータ設定を合わせてないからのような気がします…
コンフィグパラメータ合わせてのベンチも余裕があればやりたいですね。*2


それにしても集計が結構面倒だったな…
これPerlスクリプトにしてYAML管理出来るようにすればちょっとは需要あるかな?
てか自分が欲しいので後で作ってみよう。

*1:ここの設定変えたらもっと正確に取れるよ!ってのがあればコメント下さい。取り直します

*2:ニーズがあればすぐにでも