[pgsql-jp: 35964] Re: pgbenchで表示される値

Kazawa Tsunehisa digitune @ gmail.com
2005年 9月 7日 (水) 16:36:39 JST


渡部さん、はじめまして。加澤と申します。

05/09/07 に H.Watabe<watabe @ fuji-it.com> さんは書きました:
> 環境:Windows2000Server+PowerGres
> 
> 色々なパラメータを弄る事でパフォーマンスは上がると思いますが
> 定量的評価するために調べていた所、pgbenchが適切と知りました。
> 
> 一度だけ評価しただけではばらつきがあると思い、バッチ処理で連続実行し
> 平均値で評価しようとしました。
> 
> --バッチ処理例---------------------------------------------------
> pgbench -h localhost -U fitds -c 8 fitds >> c:\PgBench_Result.txt
> pgbench -h localhost -U fitds -c 8 fitds >> c:\PgBench_Result.txt
> pgbench -h localhost -U fitds -c 8 fitds >> c:\PgBench_Result.txt
> pgbench -h localhost -U fitds -c 8 fitds >> c:\PgBench_Result.txt
> pgbench -h localhost -U fitds -c 8 fitds >> c:\PgBench_Result.txt
> -----------------------------------------------------------------
> 
> これで得られた値が結構大きな幅でばらついてしまうのです。
> ⇒ 500, 450, 150, 150, 450 (Ave.340)
> 
> また、パラメータを変化させても得られる値に余り変化がなくパフォーマンス
> が向上してるようには見えないのも何か方法に問題があるのでしょうか?

僕の経験上、pgbench の結果が安定しないのは、

・テスト中に CHECKPOINT が発生したりしなかったり
・(いろんなところの) キャッシュの状態が異なっていたり

することなどが原因のことが多いようでした。
上記のように大きく値が変化してしまう場合はたいてい CHECKPOINT が
原因だったと思いますので、

・テスト中に CHECKPOINT が発生しているかどうか調べる
・CHECKPOINT が必ず何回か起こるようにする
(テスト試行回数を増やす、CHECKPOINT interval が短くなるようにする等)

などにより結果を安定させることができるのではないかと思います。

以前僕が調べたときの PostgreSQL は CHECKPOINT 時にユーザトラン
ザクション処理も停止してしまうため、あまり長い CHECKPOINT 間隔とす
ることができず (pause 時間がクリティカルな用途だった)、トータルのスルー
プットやログに出る警告メッセージを停止して CHECKPOINT 間隔を短くして
運用していたことがあります。

キャッシュ状態の方は言わずもがなだと思いますが、僕が経験した面白い
現象として、wal_buffers を大きく設定すると起動直後のみ性能が少し良く
なる、ということがありました (ずっとテストしていると次第に性能が落ちてき
て、最終的には wal_buffers をそれほど大きくしなかった時と同じくらいの
性能に落ち着きます)。


> こちらで評価する際の手順は以下の通りです。
> 
> 1.初期化
> pgbench -h localhost -U postgres -i -s 4 bench
> 
> 2.評価(実際にはバッチファイルで連続実行してます)
> pgbench -h localhost -U postgres -c 8 bench >> c:\PgBench_Result.txt
> 
> 3.パラメータ変更しサービス再起動 ⇒ 1.に戻る

他に気になるところといえば、初期化時のスケーリングファクターの指定は
ターゲットとする本番 DB の予想サイズに合わせてきちんと設定した方が
よい、ということくらいでしょうか。

何かの参考になりましたら幸いです。それではまた。

-- 
Tsunehisa KAZAWA
http://www.digitune.org



pgsql-jp メーリングリストの案内