その他
    ホーム 技術発信 DoRuby Postgres8_3⇔8_1の性能比較してみました

    Postgres8_3⇔8_1の性能比較してみました

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちは marumoruです。

    一部で(自分の周りのみ?)賑わっているPostgres8.3

    気が付いたら、Postgres8.1系で止まっていた自分がいましたので

    バージョンアップしてみました。

    その時の8.1系との性能比較調査を報告しますー。

    検証項目

    1.pgbenchを使ったtps値比較

    2.pgbenchを使ったHOT機能の動作調査

    検証端末

    OS:Linux Debian
    CPU:Pentium4 2.6GHz
    メモリ:1GHz

    前提

    スケーリングファクターを25で設定(250万件のデータ数)
    各結果値については、それぞれの条件で10回行い、その平均値を算出
    tps値(※)については、including connections establishing の値を取得
    設定ファイルについては、ほぼデフォルト値を使用する。  テスト1(pgbenchを使ったtps値比較)

    ①クライアント数によるtpsの変化調査

    pgbench -c XX -t 100 -s 25 pgbench_test

    XXの数値を 1~100までのtps値の結果を測定 

    結果値

    c値    postgres 8.1.4    postgres 8.3.1
      1     228.6493           243.420941
     10    140.781838        236.452233
     50    112.203988        151.948232
    100    106.594831        129.845791

    ★8.1より明らかにtps値が高く

      クライアント値に伴っての値の下がり幅が低いのが分かります。 

    ②トランザクション数によるtpsの変化調査

    pgbench -c 10 -t XX -s 25 pgbench_test

    XXの数値を 10~1000までのtps値の結果を測定

    結果値

    t値    postgres 8.1.4    postgres 8.3.1
      10    452.462072         368.715249
     100    151.04483         328.353416
     500    112.203988         202.543517
    1000    104.065397         165.649611

    ★クライアント値の場合と同様に

      トランザクション値に伴う下がり幅が低いことが分かります。

      このことから、負荷が上がった場合のふんばり具合が向上しているのかな

    テスト2(pgbenchを使ったHOT機能の動作調査)

    各バージョン毎にpgbenchを実行し、そのデータサイズの結果を取得 

    ①8.1.4

    調査用のデータベースを作成し、以下のpgbenchを実行

    pgbench -i -s 10 hot_test

    データ投入直後のデータサイズ 

    accounts テーブル

    SELECT pg_size_pretty(pg_relation_size(‘accounts’));

     pg_size_pretty

    —————-

     128 MB

    PostgreSQLの物理的なテーブルサイズと有効・無効領域を調べる

    SELECT * FROM pgstattuple(‘accounts’);

    -[ RECORD 1 ]——+———-

    dead_tuple_percent   | 0     <– 不要領域

    下のコマンドより、データ更新を行う 

    pgbench -c 10 -t 10000 hot_test 

    データ更新後のデータサイズ

    accounts テーブル

    SELECT pg_size_pretty(pg_relation_size(‘accounts’));

     pg_size_pretty

    —————-

     141 MB  <– 13MB増加

    PostgreSQLの物理的なテーブルサイズと有効・無効領域を調べる

    SELECT * FROM pgstattuple(‘accounts’);

    -[ RECORD 1 ]——+———-

    dead_tuple_percent   | 8.66  <– 不要領域

    ②8.3.1

    8.1.4と同様に調査用のデータベースを作成し、以下のpgbenchを実行

    pgbench -i -s 10 -F 90 hot_test 

    ( ※ FILLFACTORを「90」に設定) 

    データ投入直後のデータサイズ 

    accounts テーブル

    SELECT pg_size_pretty(pg_relation_size(‘accounts’));

     pg_size_pretty

    —————-

     137 MB

    PostgreSQLの物理的なテーブルサイズと有効・無効領域を調べる

    SELECT * FROM pgstattuple(‘accounts’);

    -[ RECORD 1 ]——+———-

    dead_tuple_percent   | 0  <– 不要領域

    以下のコマンドより、データ更新

    pgbench -c 10 -t 10000 hot_test 

    データ更新後のデータサイズ

    accounts テーブル

    SELECT pg_size_pretty(pg_relation_size(‘accounts’));

     pg_size_pretty

    —————-

     137 MB  <– 増減なし

    PostgreSQLの物理的なテーブルサイズと有効・無効領域を調べる

    SELECT * FROM pgstattuple(‘accounts’);

    -[ RECORD 1 ]——+———-

    dead_tuple_percent   | 1.48  <– 不要領域

    ★FILLFACTORの設定により初期時のデータサイズは、8.3.1の方が高い

      結果となっていますが、更新後のデータサイズが、8.3.1では増減がないことが分かる。不要領域についても数値を見れば明らかな結果ですね。

    すげー8.3