[pgsql-jp: 38444] Re: パラメータ「shared_buffers」について

Daisuke Arai d-arai @ tni.co.jp
2007年 5月 25日 (金) 15:47:51 JST


片岡様

お忙しい中ご回答いただきましてありがとうございました。
ご回答をいただきました内容から、恐縮ですが返信いたします。

> 上記情報によって私が「ではXXXにしてください」といえるものではありませ
>ん。例えば更新系が40%といっても、ほとんど同じレコードばかりを更新するの
>と全体をまんべんなく更新するのとでは状況が異なってきます。ですから、最終
>的にはご自分で実際の環境と同じ条件で性能試験を行い、最適値を見つけるしか
>ありません。
>
> ですがそこまでやるのはコストがかかりますし、そこまでぎりぎりのチューニ
>ングを必要としていない場合が多いですから、より簡単な推奨値の導き方がある
>わけです。それが最初のメールで引用されていた3つの「自論」といえます。
>
> いろいろと疑問をお持ちのようですが、一度ご自分でベンチマーク試験をやっ
>てみてください。本番環境を模した試験は大変ですので、まずはpgbenchを用い
>た簡単な試験をご自分で行ってみて、感覚をつかんでみるといいと思います。
>
>> postgresql.confの中で「min max_connections*2 or 16, 8KB each」
>> という注釈があります。
>
> これは設定可能な最小値です。これより小さくすることはできない値です
>(PostgreSQLが起動しなくなります)。当然、このような最小値に設定するので
>あれば、性能は期待できません。

いずれにしましても、「shared_buffers」の値を設定することは困難であることは
承知しております。しかしながら、データ数やサーバの性能によって異なるかも
しれませんが、推奨値というものはありませんでしょうか。
「shared_buffers」についてとあるページを見ていたとき、PostgreSQL 7.4.7(以
下、
「7.4」と称する)とPostgreSQL 8.0.1(以下、「8.0」と称する)についての検索性能
に
ついての紹介があり、ここではこのように書いてありました。

 一見して気が付くのは,7.4の性能の低さである。shared_buffersが10000の時を
ピークに,shared_buffersが大きくなるにつれてどんどん性能が劣化していく。
これは,「PostgreSQLではshared_buffersを増やしすぎると性能が悪くなる」という
経験則を裏付ける結果である。
 一方,8.0やcurrentでは,shared_buffersが増えるにしたがってある程度までは
性能が向上している。しかも,shared_buffers=150,000までの範囲では性能が
低下する傾向は見られない。
どちらの場合も性能のピークはshared_buffers=100,000付近である。

このことから、今私が使用しているバージョンですと、「shared_buffers」が
「10000」
を超える値を設定すると、パフォーマンスが悪くなるということが理解できます。

現在のテーブルのサイズ数を調べ、マニュアルなどに載っているような計算式
に従って「shared_buffers」を算出したところ、「74000」となりました。
先ほどのをふまえると、「10000」を超えると性能が悪くなるということであれば、
もうずっと性能が悪くなる一方に進むということになります。

この理論が正しいかどうかは分かりませんが、もし正しい場合、どのような手を
打たなければならなくなるでしょうか。PostgreSQLのバージョンは、データベース
のサイズ数にも影響が出るものでしょうか。

大変申し訳ありませんが、ご教授いただけませんでしょうか。
どうぞ宜しくお願い申し上げます。

荒井 大輔  E-mail [ d-arai @ tni.co.jp ]




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